簡體   English   中英

按鍵將哈希值排序為相反的順序,在Ruby中返回哈希值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM