迭代哈希中的多个值并返回一个值

时间:2009-11-14 10:11:24

标签: ruby

我有一个哈希:

  hash_example = {777 =>[dog,brown,3], 123=>[cat,orange,2]}

我想通过哈希数组值并根据第三个元素确定哪个宠物是最老的年龄。我会为我的方法选择max,我找出哪个值与max相关联的部分并将其返回到屏幕是我没有得到的部分,还是我完全丢失了?为了教育目的,我把第三个值放在那里,以便比较数组的不同元素。

b = hash_example.values.max{|k,b,c| b<=>c } 
print b

3 个答案:

答案 0 :(得分:3)

在ruby 1.8.7中有一个很好的max_by方法。

hash_example.values.max_by {|a| a[2]}

答案 1 :(得分:2)

max迭代值返回的所有项目,每个项目本身就是一个数组。这就是你缺少的一点。

> hash_example.values
# => [["dog", "brown", 3], ["cat", "orange", 2]]

max不返回您要比较的值,而是返回满足比较的项目。这在实践中意味着什么?这是脚本的“工作”版本

> hash_example.values.max{|a,b| a[2]<=>b[2] }
# => ["dog", "brown", 3]

如您所见,返回的值是完整项而不是用于比较的元素。如果您只想要第三个元素,则必须使用inject

> hash_example.values.inject(0) {|t,i| i[2] > t ? i[2] : t }
# => 3

答案 2 :(得分:1)

类似于Greg Dan对早期版本Ruby的回应。

hash_example.values.collect{|a|a[2]}.max