2016-03-24 113 views
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]] 
+0

A.uniq {|我| i.first}#=> [[a,1],[b,1]] – user6107657

+0

欢迎来到SO。请花些时间阅读http://stackoverflow.com/help/how-to-ask。并通过编辑您的问题来添加您的代码,因为代码难以在评论中阅读。 – orde

+0

'a'和'b'不是Ruby对象(除非它们是本地变量或您尚未定义的方法)。我建议你编辑它们使它们成为字符串或符号。 (我认为他们是我的答案中的字符串。)更准确地说,你想要按照他们的第一个元素“分组”(而不是“uniq”)“A”的元素,然后选择每个组中的元素其最后一个元素是最大的。然后,您可以简单地将该语句翻译成Ruby代码。 –

回答

1

您可以使用Enumerable#group_byEnumerable#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]] 
+0

谢谢你正是我想要的,谢谢卡里 – user6107657