我收到了一个嵌套的散列,需要按其值进行排序。例如:
@foo = {"a"=>{"z"=>5, "y"=>3, "x"=>88}, "b"=>{"a"=>2, "d"=>-5}}
运行以下程序时:
@foo["a"].sort{|a,b| a[1]<=>b[1]}
我得到:
[["y", 3], ["z", 5], ["x", 88]]
这太棒了,这正是我想要的。问题是我并不总是知道发送给我的所有密钥是什么,所以我需要某种循环。我试着做了以下事情:
@foo.each do |e|
e.sort{|a,b| a[1]<=>b[1]}
end
这对我来说是有意义的,因为如果我手动调用@foo.first[0],我会得到
"a"
并且@foo.first[1]返回
{"z"=>5, "y"=>3, "x"=>8}
但由于某种原因,这没有正确排序(例如根本没有排序)。我认为这是因为each对整个散列对象调用sort,而不是对“a”的值调用sort。如何访问嵌套哈希的值而不知道它的密钥是什么?