次の行を書くためのよりエレガントな方法があるかどうか疑問に思っていました:
section_event_hash = []
sections.each do |s|
section_event_hash << { s => s.find_all_events }
end
キーが の要素で、値がメソッドsections
によって返される要素の配列であるハッシュを作成したいと考えています。find_all_events
次の行を書くためのよりエレガントな方法があるかどうか疑問に思っていました:
section_event_hash = []
sections.each do |s|
section_event_hash << { s => s.find_all_events }
end
キーが の要素で、値がメソッドsections
によって返される要素の配列であるハッシュを作成したいと考えています。find_all_events
section_event_hash
配列ではなくハッシュになりたい場合は、次を使用できますeach_with_object
。
section_event_hash = sections.each_with_object({}) { |s, h| h[s] = s.find_all_events }
を使用map
して配列の配列を作成し、それを次のようにフィードできますHash[]
。
section_event_hash = Hash[sections.map { |s| [s, s.find_all_events] }]
あなたが投稿したコードは、あなたが望むことを完全に実行していません。次のようにテストして、詳しく見てみましょう。
sections = ["ab", "12"]
section_event_hash = []
sections.each do |s|
section_event_hash << { s => s.split("") }
end
puts section_event_hash.inspect
与える:
[{"ab"=>["a", "b"]}, {"12"=>["1", "2"]}]
したがって、実際にはハッシュの配列を作成しました。各ハッシュには1つのキーと値のペアが含まれています。
次のコードは、複数の要素を持つ1つのハッシュを生成します。[]の代わりに{}を使用して空のハッシュが作成されることに注意してください。中括弧はハッシュの記号であり、角括弧は特定のキーを示します。
section_event_hash = {}
sections.each do |s|
section_event_hash[s] = s.split("")
end
puts section_event_hash.inspect
=>{"ab"=>["a", "b"], "12"=>["1", "2"]}
それを行う「よりエレガントな」方法に関しては、それはあなたの定義に依存します。ここでの他の答えが示すように、通常、ルビーで何かをする方法は複数あります。seph'sは元のコードと同じデータ構造を生成し、mu'sは記述したハッシュを生成します。個人的には、読みやすく、理解しやすく、保守しやすいコードを目指しています。
array_of_section_event_hashes = sections.map do |s|
{s => s.find_all_events}
end