[英]Sort hash by key as a reverse order, return hash in Ruby
你能幫助任何人嗎? 我有一個哈希值如下。 我需要按鍵值以相反的順序對哈希進行排序,並返回哈希類型。
我的實際預期輸出是(哈希)
result = {20111104111221=>[4, 5, 6], 20111104111220=>[7, 8, 9], 20111104110950=>[1, 2, 3]}
# this is my input
irb(main):096:0> h = {20111104111221=>[4, 5, 6], 20111104110950=>[1, 2, 3], 20111104111220=>[7, 8, 9]}
=> {20111104111221=>[4, 5, 6], 20111104110950=>[1, 2, 3], 20111104111220=>[7, 8, 9]}
# It's not correct
irb(main):095:0> Hash[h.sort]
=> {20111104111221=>[4, 5, 6], 20111104110950=>[1, 2, 3], 20111104111220=>[7, 8, 9]}
所以,我試過這個。 它是正確的,但它作為數組值返回,我需要一個返回值作為哈希。
# It's correct but it's not a hash
irb(main):092:0> arr = h.sort_by { |k,v| k }.reverse
=> [[20111104111221, [4, 5, 6]], [20111104111220, [7, 8, 9]], [20111104110950, [1, 2, 3]]]
我再次嘗試數組哈希轉換..但它的幫助。
# It's also not correct.
irb(main):092:0> irb(main):098:0> Hash[*arr.flatten]
=> {5=>6, 20111104111221=>4, 20111104110950=>1, 2=>3, 8=>9, 20111104111220=>7}
你幾乎就在那里用h.sort_by...
,不要把它只是把它喂給Hash[]
:
Hash[h.sort_by { |k,v| -k }]
我也簡化了你的排序,否定數字與排序和反轉相同。
例如:
>> h = {20111104111221=>[4, 5, 6], 20111104110950=>[1, 2, 3], 20111104111220=>[7, 8, 9]}
=> {20111104111221=>[4, 5, 6], 20111104110950=>[1, 2, 3], 20111104111220=>[7, 8, 9]}
>> Hash[h.sort_by { |k,v| -k }]
=> {20111104111221=>[4, 5, 6], 20111104111220=>[7, 8, 9], 20111104110950=>[1, 2, 3]}
你使用的是哪個版本的紅寶石? 在1.8中不能訂購哈希,在1.9中它們是根據插入訂購的。 這里有更多信息 。
鑒於它們的處理方式有所不同,我不會專注於對哈希本身進行排序,而是在對鍵進行排序並將它們用作參考時,例如:
data = {20111104111221=>[4, 5, 6], 20111104111220=>[7, 8, 9], 20111104110950=>[1, 2, 3]}
keys = data.keys.sort.reverse
keys.each do |key|
puts data[key].pretty_inspect
# ... do work ...
end
調試行就是如何訪問您的值的示例。 希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.