我有这个数组:
[[4, 50], [2, 28], [1, 4], [4, 41], [1, 9], [2, 25]]
我希望构造一个由这个数组的元组[f,l]组成的数组,这样在[f,l]之前就没有元组[g,h],g == f。选定的元组的顺序与原始数组的顺序相同。
[[4, 50], [2, 28], [1, 4]]
示例如果还有更多以4或1开头的数组,则应将其删除。它可以是任何整数,4和1只是一个例子。
答案 0 :(得分:7)
Array#uniq
似乎有效:
[[4, 50], [2, 28], [1, 4], [4, 41], [1, 9], [2, 25]].uniq(&:first)
#=> [[4, 50], [2, 28], [1, 4]]
答案 1 :(得分:0)
我无法改进@ Stefan的答案,但这是另一种仅仅逐步完成数组元素的方法:
a = [[4, 50], [2, 28], [1, 4], [4, 41], [1, 9], [2, 25]]
a.each_with_object([]) { |(f,l),a| a<<[f,l] unless a.any? { |g,_| g==f } }
#=> [[4, 50], [2, 28], [1, 4]]