按键将哈希值排序为相反的顺序,在Ruby中返回哈希值

Mr.*_*ack 2 ruby arrays sorting hash reverse

你能帮助任何人吗?我有一个哈希值如下.我需要按键值以相反的顺序对哈希进行排序,并返回哈希类型.

我的实际预期输出是(哈希)

result = {20111104111221=>[4, 5, 6], 20111104111220=>[7, 8, 9], 20111104110950=>[1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)
# 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]}
Run Code Online (Sandbox Code Playgroud)

所以,我试过这个.它是正确的,但它作为数组值返回,我需要一个返回值作为哈希.

# 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]]]
Run Code Online (Sandbox Code Playgroud)

我再次尝试数组哈希转换..但它的帮助.

# 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}
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 8

你几乎就在那里h.sort_by...,不要压扁它只是喂它Hash[]:

Hash[h.sort_by { |k,v| -k }]
Run Code Online (Sandbox Code Playgroud)

我也简化了你的排序,否定数字与排序和反转相同.

例如:

>> 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]}
Run Code Online (Sandbox Code Playgroud)