私はハッシュを受け入れるメソッドを持っています。私は、ハッシュをチェックして、最初に見つかった一致するキーの値を返すキー配列(優先順位順)を持っていますが、これはblank?
ではありません。これまでのところ私は以下のことを持っていますが、私はこのメソッドを大いに利用しているので、もっと効率的な方法があるのだろうかと思います。 「フー」ハッシュキー/値が存在する場合、与えられたキーの配列でハッシュ値を返すより効率的な方法はありますか?
答えて
はあなたの方法は、効率の観点から最善におそらく近いです:私はresult
があることを期待する
{
id: 10,
title: "",
name: "Foo",
slug: "foo"
}
:
result = [:title, :name, :identifier, :slug].each do |key|
if my_hash[key].present?
return my_hash[key]
break
end
end
だから、次のハッシュを与えられました。しかし、あなたは、その後、それは効率を維持し、よりエレガントになりたい場合:
my_hash[%i[title name identifier slug].find{|key| my_hash[key].present?}]
あなたは、次の操作を行うことができます
whitelisted_keys = [:title, :name, :identifier, :slug]
filtered_hash = your_hash.slice(*whitelisted_keys) # will only get pair matching your whitelisted_keys
# return all `.present?` key/values pairs:
filtered_hash.select{ |k,v| v.present? }
# return an array of the first key/value pair present:
filtered_hash.find{ |k,v| v.present? } # append .last to get the value
澤はコメントで指摘したように、これが最も効率的ではありません
ニース!私は 'スライス 'の使い方を理解しようとしていましたが、私が見逃していたのはあなたの' whitelisted_keys'でした。どういうわけか: 'your_hash [your_hash.slice(* whitelisted_keys).keys.first]'? – jvillian
これは、最初にホワイトリストに登録されたキーの値を返すだけです(存在しないかもしれません) – MrYoshiji
これはエレガントかもしれませんが、OPよりも効率が悪いです。中間ハッシュを作成しています。また、Railsのメソッド 'slice'を呼び出すと、コードの効率が悪くなります。 – sawa
- 1. キー値の文字列の値を与えられた場合、コンテンツではなくキーをエンコードする方法
- 2. 提供されたjsonObjectにキーがない場合、効率的にチェックする方法はありますか?
- 3. 配列が与えられます。与えられた配列から一意の数値を返します
- 4. このように文字列を効率的に切り替える方法はありますか?より効率的なものはありますか?
- 5. オブジェクトのサブセットを返すより効率的な方法がありますか?
- 6. MySQLの効率的なテストで、値がより大きい値の場合は
- 7. 与えられた数値配列に存在しない数値を生成する方法は?
- 8. Rubyオブジェクトのコレクションからソートされたハッシュを構築する効率的な方法はありますか?
- 9. 列を分割するためのより効率的な方法があり
- 10. より効率的な結合または存在するSQLステートメント
- 11. 戻り値がlongより大きい場合にメソッドからlongを返す方法はありますか?
- 12. キーと値の両方が配列参照である場合のPerlハッシュ
- 13. Javascript:与えられた値から配列比率を計算します
- 14. キーが範囲内にあり、単一の値ではない場合、キー値ペアをmemcacheまたは格納する方法はありますか?
- 15. 参照されたハッシュとperlのキー配列から値の配列を効率的に取得する方法は?
- 16. メソッドオプションに値を渡すより効率的な方法
- 17. これを行うより効率的な方法はありますか?
- 18. IDictionaryのマージ - これより効率的な方法はありますか?
- 19. 繰り返し値を持つ配列からハッシュを作成する方法
- 20. 存在する値のみを返す方法はありますか?
- 21. クラスが存在する場合に値を配列に入れる方法
- 22. ハッシュ値が存在しない場合に404ページを表示する方法
- 23. mongooseで与えられた値より大きい配列のすべての要素を返します
- 24. 配列キーを値で返します(日付を返すために与えられた月)
- 25. Ruby - 与えられた日付(=キー)に基づいてハッシュの値を合計する方法は?
- 26. 与えられたプロパティがlodashテンプレートに存在しない場合のデフォルト値の追加方法
- 27. キーが存在する場合、ネストされたdictからdict値を引く
- 28. 与えられた週に値を取得する最も効率的な方法は?
- 29. SQL行からストアドプロシージャの既存の値を選択する:これを行うより効率的な方法はありますか?
- 30. 与えられた線分の集合の間の交差点の数を数える効率的な方法はありますか?
あなたはキーと値のペアが必要だと書いてありますが、あなたのコードは値を返すだけです。あなたは本当に欲しいのですか? – sawa
わかりやすくするために編集しました - 順序付けられたキーのリストで見つかった最初のキーの値が必要です。ハッシュにはキーの一部または全部が含まれていることがありますが、ハッシュにキーを持たせることもありますが、値ではありません(真実の値ではない)。 –
コードの行に沿って、 'break my_hash [key]'を実行することもできます。 – sawa