Ruby 遍历散列并比较值对

Ruby iterate through hash and compare value pairs

我的 Ruby 任务是遍历散列和 return 与最低值关联的键,没有 使用以下任何方法:

#keys #values #min #sort #min_by

我不明白如何遍历散列并存储每对通过的散列,将其与最后通过的对以及 return 最低键进行比较。这是我的代码,向您展示我的思维过程,但这当然行不通。关于如何执行此操作的任何想法?谢谢!

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 

跟踪 min_valuekey_for_min_value。遍历哈希,任何时候当前 value 低于 min_value,更新这两个变量。循环结束时,return key_for_min_value.

我没有包含示例代码,因为,嘿,这是作业。 :) 祝你好运!

一种方法是将我们的散列转换为数组;

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 更改为更高的内容或找到更有创意的内容:)

我们可以使用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"