Ruby 对散列元素使用方法
所以我在另一个线程中半问了这个问题,关于如何获取.max并向屏幕返回一个值。所有这些都是很好的答案,我只是没有问完整的问题。我最终选择了: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
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返回键,然后使用该键返回我想要的元素?