在哈希元素上使用方法

时间:2009-11-15 18:43:24

标签: ruby

所以我在另一个帖子中半问这个如何获取.max并将值返回到屏幕。所有非常好的答案,我只是没有问整个问题。我最终选择了:

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

 h =hash_example.values.collect{|a|a[0]}.max #change .max value based on element
 puts the a[1] element based on what is returned in h because of .max of a[0].max

现在的问题是我想取h(发现的.max值)并基于发现该元素在下一行代码中从同一个数组返回一个不同的元素。进一步阐述,让我们说上面的代码发现狗为.max。如何在下一行代码中将褐色或3返回到屏幕?

 puts hash_example.some_method_here{block of  useful code using the h value} ? 

我可能会以错误的方式调查这个问题,还是仅仅是一个简单的看法?我已经尝试了一些嵌套在块中,但我绝对没有正确嵌套它。 .inject和.map我认为是正确的方向,但我没有正确地编写块。

2 个答案:

答案 0 :(得分:1)

你可能最好对哈希值进行排序,并取最后一个(作为最大值),然后在那里工作。

>> h = {777 =>["dog","brown",3], 123=>["cat","orange",2]}
=> {777=>["dog", "brown", 3], 123=>["cat", "orange", 2]}
>> h.values.sort_by{|a|a[0]}.last[1]
=> "brown"

sort_by方法接受一个块,该块描述了相对于单个元素要排序的内容 - 在这种情况下,它使用的是第一个数组元素。

答案 1 :(得分:1)

这是一种找到max的方法,它也可以为你提供其他数组元素......

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

>> e.values.transpose[0].max
=> "dog"

所以我们可以从顶部重写代码......

x = e.values
t = x.transpose[0]
x[t.index t.max]

返回["dog", "brown", 3]