我有什么:
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}"}
我已经尝试了很多其他的东西,并且很难绕过这个。
不确定是否重要但是我从一个文件中读到这个哈希值,这个数字是浮点数
答案 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
之前join
和puts
数组:
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