我希望通过内部数组中的第一个元素从数组数组中找到唯一元素。
例如
a = [[1,2],[2,3],[1,5]
我想要像
这样的东西[[1,2],[2,3]]
答案 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]]