删除Ruby中数组数组中的重复项

时间:2013-05-10 07:02:53

标签: ruby arrays

我有一个数组数组,如下所示:

aa = [ [a,d], [a,d1], [a,d], [b,d], [b,d2], [b,d3], [b,d2], [a,d2] ]

我想拥有一个独特的数组数组,而不仅仅是第一个元素 - 我可以通过像aa.uniq(&:first)那样做 - 但是如果BOTH值匹配则删除内部数组。结果将是:

aa = [ [a,d], [a,d1], [a,d2], [b,d], [b,d2], [b,d3] ]

有人可以协助我指出一种有效的方法吗?我有大量的数组 - 大约100万 - 我需要处理。

任何帮助表示赞赏!约翰

3 个答案:

答案 0 :(得分:2)

如果您需要维护元素的集合,其中每个元素都是唯一的,并且它们的顺序并不重要。你应该使用Set。例如,

require 'set'
my_set = Set.new
my_set << [1, 'a']
my_set << [1, 'a']
my_set << [1, 'b']
my_set.each { |elem| puts "#{elem}" }

它会给你

[1, "a"]
[1, "b"]

如果订单很重要,请使用您阵列上的uniq!

aa.uniq!

答案 1 :(得分:0)

试试这样:

aa = [ ["a","d"], ["a","d1"], ["a","d"], ["b","d"] ]
aa.uniq
aa=[["a", "d"], ["a", "d1"], ["b", "d"]]

你错过了双引号(“)。在数组内部,变量a,d,a,d1等是字符串。所以,你应该将它们放在双引号(”“)中。

答案 2 :(得分:0)

如果你想从数组中获取唯一元素,这将删除重复元素,你可以试试这个:

a = [[1, 2], [2, 3], [1, 2], [2, 3], [3, 4]]
a & a #=> [[1, 2], [2, 3], [3, 4]]