2016-02-28 44 views
1

我有一個空數組和兩個陣列與數據篩選兩個陣列夫特

var resultsArray = [String]() 

var array1 = ["1","2","2","3","4"] 
var array2 = ["1","2","2","3","4","5","6"] 

我的目標是在resultsArray與元件追加從array2不匹配array1(「5」和「6」在這個例子中)。

這樣做最微妙的方法是什麼?

謝謝。

+3

我認爲你需要更具體地說明你的意思是「不匹配」。你是否指'array2'中不在'array1'中的值?如果'array2'有三個「4」 - 如果其中兩個進入'resultsArray'或零?或者你的意思是在同一個地方不匹配的值,所以'[1,2,3]'和'[3,1,2]'在'resultsArray'中會有1,2和3? –

回答

14

使用filter功能

var resultsArray = [String]() 

let array1 = ["1","2","2","3","4"] 
let array2 = ["1","2","2","3","4","5","6"] 

let filteredArray = array2.filter{ !array1.contains($0) } 

resultsArray.appendContentsOf(filteredArray) 

如果集合包含了獨特的項目考慮使用Set,而不是Array

+0

這就是我一直在尋找的確切解決方案。謝謝,瓦甸! –

+3

應該指出的是,這具有O(n^2)的計算複雜度,並且如果陣列變大,它可能會不必要地慢。考慮使用Set而不是O(1)而不是O(n) –

0

使用過濾功能爲目的,以發現不同數量的元素的兩個數組

let Filter = array2.filter{!array1} 
resultArray.appendContentsof(Filter) 
0
var resultsArray: [String] = [] 

let arrayX = ["1","2","2","3","4"] 
let arrayY = ["1","2","2","3","4","5","6","7"] 

let setX = Set(arrayX), setY = Set(arrayY) 

resultsArray.append(contentsOf: setY.subtracting(setX)) 

這個答案比使用過濾器快。

+1

將很高興有一些解釋 – Ivan

+0

@Ivan這是相同的答案,但用集合減法 – jnblanchard

+0

0.00490117073059082 vs 0.0463278293609619在時間測量。我的答案更快。 – jnblanchard