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. 在哈希陣列
- 5. 按陣列鍵排列哈希陣列
- 6. 排序散列哈希
- 7. 構建散列哈希
- 8. Rails哈希陣列哈希如何?
- 9. 比較哈希陣列陣列和outputing哈希值的新陣列
- 10. 散列哈希或數組陣列示例
- 11. 包含紅寶石數組哈希陣列的散列
- 12. Perl哈希陣列大小
- 13. 在哈希存儲陣列
- 14. Powershell陣列或哈希表?
- 15. 遍歷軌哈希陣列
- 16. 與許多陣列哈希
- 17. 在Perl中哈希陣列
- 18. PHP哈希鍵陣列
- 19. 如何從Perl中的哈希數組創建哈希散列?
- 20. 遍歷和更新散列哈希的哈希
- 21. 哈希表散列避免負面哈希碼
- 22. 如何從散列哈希中獲得哈希切片?
- 23. 將散列數組傳遞給哈希哈希值
- 24. 在Ruby中訪問哈希散列哈希
- 25. 如何排序不是簡單的散列(哈希散列)
- 26. 散列在哈希中的散列問題
- 27. 轉換哈希散列成單個散列
- 28. 的Perl:提領哈希散列的散列
- 29. 訪問perl中散列哈希散列的特定鍵?
- 30. 迭代通過哈希散列內
'Hash.new',或者朋友喜歡打電話給他,'{}':-)儘管我喜歡純粹的功能性解決方案,但請注意'merge'會在每次迭代時創建一個新的散列;我們可以使用'update'來代替(它不會混淆輸入哈希值,這是重點):'hs.reduce({},:update)' – tokland
做得很好 – Aeramor
@tokland,將您的評論作爲單獨發佈答案 - 它應該獲得更多的知名度 – Jason