Ruby 对散列元素使用方法

Ruby 对散列元素使用方法,ruby,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

所以我在另一个线程中半问了这个问题,关于如何获取.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值),并根据找到的元素,在下一行代码中从同一数组返回不同的元素。为了进一步说明,让我们假设上面的代码发现dog为.max。如何在下一行代码中将brown或3返回到屏幕

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

我可能是用错误的方法来研究这个问题,还是仅仅是一个简单的假设?我试过在区块中嵌套,但肯定没有正确嵌套。inject和.map我认为是正确的方向,但我没有正确地写入块。

您可能最好对哈希值进行排序,并取最后一个值(作为最大值),然后从那里开始工作

>> 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方法接受一个块,该块描述了相对于单个元素要排序的内容-在本例中,它使用的是第一个数组元素。

以下是一种查找最大值的方法,该最大值也将为您提供其他数组元素

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]

这也是我要建议的。顺便说一句,请注意
[0]
与“dog”是第一个这一事实无关,相反,它剥掉了现在一排
[“dog”,“cat”,“zebra”,“cheetah”,“serval”…]
。这项技术还可以获得像
[“棕色”、“橙色”、…]
[3,2,…]
这样的行。(这些将是
[1]
[2]
行。)关于如何解决这个问题,我有另一个想法。我可以找到元素的.max并返回哈希键吗?获取散列键并返回要显示的数组中的元素。我不知道如何从.max返回键,然后使用该键返回我想要的元素?