我有一个哈希:
hash_example = {777 =>[dog,brown,3], 123=>[cat,orange,2]}
我想通过哈希数组值并根据第三个元素确定哪个宠物是最老的年龄。我会为我的方法选择max
,我找出哪个值与max
相关联的部分并将其返回到屏幕是我没有得到的部分,还是我完全丢失了?为了教育目的,我把第三个值放在那里,以便比较数组的不同元素。
b = hash_example.values.max{|k,b,c| b<=>c }
print b
答案 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