我试图实现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}"
我已将此更新作为提醒我自己可能遇到类似问题的人
答案 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|
,实际上在a
和b
上进行并行分配。这不是你想要我信任的。我上面给出的是做到这一点的方法。
答案 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}