2013-05-10 164 views
0

除去数组的数组重复我有数组的数组,像这样:在红宝石

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

我想有阵列的独特阵列,而不是仅仅在第一元件上 - 我可以做通过做一些像aa.uniq(&:第一个) - 但是如果两个值匹配,而是删除内部数组。所以结果将是:

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

任何人都可以帮助指出我这样做的有效方法吗?我有大量的数组 - 大约100万 - 我需要处理。

任何帮助表示赞赏! John

+4

只是做'aa.uniq'? – Dogbert 2013-05-10 07:04:10

+0

'aa.uniq(&:first)'是什么意思? – 2013-05-10 09:00:11

回答

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! 
0

尝试这样的:

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

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

0

如果你想从一个数组,这将删除重复的元素独特的元素,你可以试试这个:

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