Q
陣列哈希散列
54
A
回答
94
您可以使用
a.reduce Hash.new, :merge
直接產生
{:a=>:b, :c=>:d}
注意,在碰撞的情況下,順序很重要。後者的哈希值覆蓋前面的映射,例如參見:
[{a: :b}, {c: :d}, {e: :f, a: :g}].reduce Hash.new, :merge # {:a=>:g, :c=>:d, :e=>:f}
19
這兩行是等同的:
total_hash = hs.reduce({}) { |acc_hash, hash| acc_hash.merge(hash) }
total_hash = hs.reduce({}, :merge)
注意Hash#merge
創建在每次迭代一個新的哈希值,如果你正在建設一個這可能是一個問題大哈希。在這種情況下,使用update
代替:
total_hash = hs.reduce({}, :update)
另一種方法是將哈希轉化爲對,然後建立最終的哈希:
total_hash = hs.flat_map(&:to_a).to_h
18
您可以使用.inject
:
a.inject(:merge)
#=> {:a=>:b, :c=>:d}
它從兩個合併的每個迭代啓動一個新的散列。爲了避免這種情況,你可以使用破壞性:merge!
(或:update
,這是相同的):
a.inject(:merge!)
#=> {:a=>:b, :c=>:d}
0
試試這個
a.inject({}){|acc, hash| acc.merge(hash)} #=> {:a=>:b, :c=>:d}
相關問題
- 1. 哈希散列與陣內哈希
- 2. 哈希散列
- 3. 寫散列哈希
- 4. 散列哈希perl
- 5. 打印哈希散列作爲矩陣
- 6. 在哈希陣列
- 7. 哈希陣列(autovivification ??)
- 8. 按陣列鍵排列哈希陣列
- 9. 構建散列哈希
- 10. 製作md5散列哈希
- 11. 排序散列哈希
- 12. Rails哈希陣列哈希如何?
- 13. 比較哈希陣列陣列和outputing哈希值的新陣列
- 14. 在javascript中列表的散列哈希哈希
- 15. 包含紅寶石數組哈希陣列的散列
- 16. 排序哈希散列陣列相對於在Ruby中
- 17. 散列哈希或數組陣列示例
- 18. 紅寶石哈希鍵陣列條件的散列值
- 19. 如何共享哈希散列在多線程的perl分享哈希散列
- 20. PHP哈希鍵陣列
- 21. 遍歷軌哈希陣列
- 22. Powershell陣列或哈希表?
- 23. Perl轉儲哈希陣列
- 24. 在哈希存儲陣列
- 25. 哈希轉換陣列JSON
- 26. 在Perl中哈希陣列
- 27. Perl哈希陣列大小
- 28. 哈希操作陣列
- 29. 哈希表和桶陣列
- 30. Rails哈希/陣列關係
'Hash.new',或者朋友喜歡打電話給他,'{}':-)儘管我喜歡純粹的功能性解決方案,但請注意'merge'會在每次迭代時創建一個新的散列;我們可以使用'update'來代替(它不會混淆輸入哈希值,這是重點):'hs.reduce({},:update)' – tokland
做得很好 – Aeramor
@tokland,將您的評論作爲單獨發佈答案 - 它應該獲得更多的知名度 – Jason