我的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
答案 0 :(得分:5)
跟踪min_value
和key_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#first
和Array#last
方法来访问键和值。
h = {"a" => 1, "b" => 2, "c" => 0}
p h.reduce{ |f, s| f.last > s.last ? s : f }.first
#=> "c"