如何通过递增值迭代哈希?

时间:2017-03-08 22:32:49

标签: ruby hash iterator

我正在使用Ruby 2.4。我有一个哈希,它的键是一个字符串,其值是一个数字(一个正整数)。我按照这样的方式迭代

  my_hash.each do |key, value|

我的问题是,如何迭代我的哈希,其中每对按升序值排序?也就是说,如果我的哈希是

{"a" => 2, "b" => 4, "c" => 1}

“c”=>首先迭代1对,然后是“a”=> 2,然后“b”=> 4。

2 个答案:

答案 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 }

可枚举#sort_by

有关文档,请参阅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 }