数组数组中的唯一元素

时间:2011-10-05 07:11:41

标签: ruby arrays

我希望通过内部数组中的第一个元素从数组数组中找到唯一元素。

例如

a = [[1,2],[2,3],[1,5]

我想要像

这样的东西
[[1,2],[2,3]]

2 个答案:

答案 0 :(得分:12)

uniq方法需要一个块:

uniq_a = a.uniq(&:first)

或者如果你想在现场进行:

a.uniq!(&:first)

例如:

>> a = [[1,2],[2,3],[1,5]]
=> [[1, 2], [2, 3], [1, 5]]
>> a.uniq(&:first)
=> [[1, 2], [2, 3]]
>> a
=> [[1, 2], [2, 3], [1, 5]]

或者

>> a = [[1,2],[2,3],[1,5]]
=> [[1, 2], [2, 3], [1, 5]]
>> a.uniq!(&:first)
=> [[1, 2], [2, 3]]
>> a
=> [[1, 2], [2, 3]]

如果你被困在1.8.7的土地上uniq没有阻挡,那么你可以这样做:

a.group_by(&:first).values.map(&:first)

例如:

>> a = [[1,2],[2,3],[1,5]]
=> [[1, 2], [2, 3], [1, 5]]
>> a.group_by(&:first).values.map(&:first)
=> [[1, 2], [2, 3]]

感谢额外的刺激Jin

答案 1 :(得分:1)

这是一个ruby 1.8.7解决方案

irb> [[1,2],[2,3],[1,5]].inject([]) { |memo,x| memo << x unless memo.detect { |item| item.first == x.first }; memo }
=> [[1, 2], [2, 3]]

你也可以把速记放在哈希上,有点懒,取而代之的是最后一项

irb> [[1,2],[2,3],[1,5]].inject({}) { |memo,x| memo[x.first] = x; memo }.map { |x| x.last }
=> [[1, 5], [2, 3]]