0
A=[[a,3],[a,2],[a,1],[b,1],[b,3]]
我想uniq
由第一个元素数组,但保留具有最大的第二个元素的项目删除重复的多维数组
结果应该是
[[a,3],[b,3]]
这里是我的代码:
A.uniq{|i| i.first}
=> [[a,1],[b,1]]
A=[[a,3],[a,2],[a,1],[b,1],[b,3]]
我想uniq
由第一个元素数组,但保留具有最大的第二个元素的项目删除重复的多维数组
结果应该是
[[a,3],[b,3]]
这里是我的代码:
A.uniq{|i| i.first}
=> [[a,1],[b,1]]
您可以使用Enumerable#group_by和Enumerable#max_by。
A=[['a',3],['a',2],['a',1],['b',1],['b',3]]
A.group_by(&:first).map { |_,v| v.max_by(&:last) }
#=> [["a", 3], ["b", 3]]
两个步骤:
h = A.group_by(&:first)
#=> {"a"=>[["a", 3], ["a", 2], ["a", 1]], "b"=>[["b", 1], ["b", 3]]}
h.map { |_,v| v.max_by(&:last) }
#=> [["a", 3], ["b", 3]]
谢谢你正是我想要的,谢谢卡里 – user6107657
A.uniq {|我| i.first}#=> [[a,1],[b,1]] – user6107657
欢迎来到SO。请花些时间阅读http://stackoverflow.com/help/how-to-ask。并通过编辑您的问题来添加您的代码,因为代码难以在评论中阅读。 – orde
'a'和'b'不是Ruby对象(除非它们是本地变量或您尚未定义的方法)。我建议你编辑它们使它们成为字符串或符号。 (我认为他们是我的答案中的字符串。)更准确地说,你想要按照他们的第一个元素“分组”(而不是“uniq”)“A”的元素,然后选择每个组中的元素其最后一个元素是最大的。然后,您可以简单地将该语句翻译成Ruby代码。 –