2013-05-10 262 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]]