Ruby使用max_by在多维数组中查找具有最大值的元素

时间:2014-04-28 07:47:58

标签: ruby arrays sorting multidimensional-array

我试图实现max_by来查找多维数组中值最高的元素。
代码如下

ar = [[123,345,43,35,43,1],[456,123,43,35,43,1],[675,123,43,35,43,1],[123,123,43,35,43,321]]
x = ar.max_by { |a,b| a <=> b }
p "result #{x.inspect}"

输出为" result [456, 123, 43, 35, 43, 1]" 你可以向我解释我的代码有什么问题吗?

更新1
使用max_by

ar  = [ {a:1},{a:2},{a:3}]
x = ar.max_by { |e| e[:a] }
p "result #{x.inspect}"

我已将此更新作为提醒我自己可能遇到类似问题的人

3 个答案:

答案 0 :(得分:4)

你需要这样做:

ar = [[123,345,43,35,43,1],[456,123,43,35,43,1],[675,123,43,35,43,1],[123,123,43,35,43,321]]
x = ar.max { |a,b| a.max <=> b.max }

使用#max_by,您传递每个元素数组,然后传递|a, b|,实际上在ab上进行并行分配。这不是你想要我信任的。我上面给出的是做到这一点的方法。

答案 1 :(得分:3)

max_by为您处理比较,只返回一个元素的最大值:

ar.max_by { |a| a.max }
#=> [675, 123, 43, 35, 43, 1]

甚至更短:

ar.max_by(&:max)
#=> [675, 123, 43, 35, 43, 1]

答案 2 :(得分:0)

好吧,如果我没有弄错,那么你需要找到每个子阵列的最大值,结果应该是这样的:

[345, 456, 675, 321] 

如果那你在寻找什么:

x = ar.map{|x| x.max}