我正在使用Ruby 2.4。我有一个哈希,它的键是一个字符串,其值是一个数字(一个正整数)。我按照这样的方式迭代
my_hash.each do |key, value|
我的问题是,如何迭代我的哈希,其中每对按升序值排序?也就是说,如果我的哈希是
{"a" => 2, "b" => 4, "c" => 1}
“c”=>首先迭代1对,然后是“a”=> 2,然后“b”=> 4。
答案 0 :(得分:2)
您可以先对哈希的键值对进行排序,然后对其进行迭代。
my_hash.sort_by { |_, value| value }.each { |key, value| puts key }
如果my_hash = {"a" => 2, "b" => 4, "c" => 1}
,则输出为:
Ç
一个
B'/ P>
根据建议,您可以使用Array#last实例方法进行简化。
my_hash.sort_by(&:last).each { |key, value| puts key }
有关文档,请参阅Enumerable#sort_by。
使用每个键值对调用传递给sort_by
的块。
sort_by
的结果是嵌套数组。
使用上面的例子:
p my_hash.sort_by(&:last)
[[“c”,1],[“a”,2],[“b”,4]]
答案 1 :(得分:0)
在Ruby 2.7中,您可以numbered block parameters以较短的方式引用您的哈希键或哈希值。如果您需要例如转换为字符串:
my_hash.sort_by { _1.to_s }.each {|key, value| puts key }