Ruby迭代哈希并比较值对

时间:2015-11-24 22:26:47

标签: ruby hash iteration

我的Ruby分配是迭代哈希并使用以下任何方法返回与最低值相关联的键:

#keys #values #min #sort #min_by

我不明白如何遍历哈希并在每个对出现时存储它们,将它与最后一对进行比较,然后返回最低密钥。这是我的代码,向您展示我的思考过程,但它当然不起作用。有关如何做到这一点的任何想法?谢谢!

def key_for_min_value(name_hash)
  index = 0 
  lowest_hash = {}

  name_hash.collect do |key, value|
    if value[index] < value[index + 1]
      lowest = value
      index = index + 1 
      key_for_min_value[value]

      return lowest
    end
  end
end 

3 个答案:

答案 0 :(得分:5)

跟踪min_valuekey_for_min_value。迭代哈希,并且在当前value低于min_value的任何时候,更新这两个变量。在循环结束时,返回key_for_min_value

我没有包含示例代码,因为,嘿,这是功课。祝你好运!

答案 1 :(得分:1)

一种方法是将哈希转换为数组;

def key_for_min_value(name_hash)
  # Convert hash to array
  name_a = name_hash.to_a

  # Default key value
  d_value= 1000
  d_key= 0

  # Iterate new array 
  name_a.each do |i|
      # If current value is lower than default, change value&key 
      if i[1] < d_value
        d_value = i[1]
        d_key = i[0]
      end

   end

  return d_key

end  

您可能需要将d_value更改为更高的值或找到更具创意的内容:)

答案 2 :(得分:0)

我们可以使用Enumerable#reduce方法比较条目并选择最小值。每个哈希条目都作为一个数组传入,在reduce方法中包含2个元素,因此,我使用Array#firstArray#last方法来访问键和值。

h = {"a" => 1, "b" => 2, "c" => 0}
p h.reduce{ |f, s| f.last > s.last ? s : f }.first
#=> "c"