我想知道是否有寫以下行的更優雅的方式:如何使這個哈希創建漂亮
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
方法返回的元素的數組。
您發佈的代碼並不完全符合您所說的要求。讓我們來仔細看看它通過測試,像這樣:
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"]}]
所以,你實際上已經創建散列,其中每個哈希包含一個鍵值對的數組。
以下代碼會生成一個包含多個元素的散列。注意如何用{}而不是[]來創建一個空的散列。大括號是散列的符號,而方括號是指特定的鍵。
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"]}
至於這樣做的一個 「更優雅」 的方式,也取決於你的定義。正如這裏的其他答案所示,通常有不止一種方法可以在Ruby中進行某些操作。 seph的產生與原始代碼相同的數據結構,而mu的產生你描述的散列。就我個人而言,我只是瞄準易於閱讀,理解和維護的代碼。
如果你想section_event_hash
真的是一個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] }]
array_of_section_event_hashes = sections.map do |s|
{s => s.find_all_events}
end
問題不明確。變量名'section_event_hash'表明它是一個散列,並且你的代碼爲它分配一個數組,並且你說你想創建一個散列。 – sawa