散列中嵌套数组的最大值

时间:2013-11-18 02:46:42

标签: ruby arrays hash

我有什么:

hash = {id =>[string, number], id =>[string, number]}

我需要获得数字的最大值。我已经能够做到这一点,但是当我说出来的时候。 我明白了:

id
string
number

我需要什么

id string number

这是我尝试过的:

这会将最大值带到列表顶部,但我需要排除列表的其余部分。

hash.each{|x, y| puts "#{x} #{y[0]} #{y[1]}"}.max

返回最大值但垂直显示

puts hash.max_by{|y| "#{y}"} 

我已经尝试了很多其他的东西,并且很难绕过这个。

不确定是否重要但是我从一个文件中读到这个哈希值,这个数字是浮点数

2 个答案:

答案 0 :(得分:4)

这里的max没有做任何事情(因为它在hash上调用并且它的返回值从未使用过):

hash.each{|x, y| puts "#{x} #{y[0]} #{y[1]}"}.max

这与在数组上执行puts相同(因为这是max_by返回的内容),它会在单独的行上打印每个元素。您还不必要地将您的号码转换为字符串(这可能会导致意外的比较结果):

puts hash.max_by{|y| "#{y}"}

而是让我们获得最大键/值对:

max = hash.max_by { |id, (string, number)| number }
#=> ["the-id", ["the-string", 3.14]]

现在我们可以在flatten之前joinputs数组:

puts max.flatten.join(' ')
# prints: the-id the-string 3.14

答案 1 :(得分:0)

我会以number作为键重新排列哈希值,然后使用sort_by()http://www.rubyinside.com/how-to/ruby-sort-hash