Ruby如果有匹配的元素,如何删除数组?

时间:2014-06-25 14:37:36

标签: ruby

我有这个数组:

[[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只是一个例子。

2 个答案:

答案 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]]