我有一個空數組和兩個陣列與數據篩選兩個陣列夫特
var resultsArray = [String]()
var array1 = ["1","2","2","3","4"]
var array2 = ["1","2","2","3","4","5","6"]
我的目標是在resultsArray
與元件追加從array2
不匹配array1
(「5」和「6」在這個例子中)。
這樣做最微妙的方法是什麼?
謝謝。
我有一個空數組和兩個陣列與數據篩選兩個陣列夫特
var resultsArray = [String]()
var array1 = ["1","2","2","3","4"]
var array2 = ["1","2","2","3","4","5","6"]
我的目標是在resultsArray
與元件追加從array2
不匹配array1
(「5」和「6」在這個例子中)。
這樣做最微妙的方法是什麼?
謝謝。
使用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
這就是我一直在尋找的確切解決方案。謝謝,瓦甸! –
應該指出的是,這具有O(n^2)的計算複雜度,並且如果陣列變大,它可能會不必要地慢。考慮使用Set而不是O(1)而不是O(n) –
使用過濾功能爲目的,以發現不同數量的元素的兩個數組
在let Filter = array2.filter{!array1}
resultArray.appendContentsof(Filter)
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))
這個答案比使用過濾器快。
將很高興有一些解釋 – Ivan
@Ivan這是相同的答案,但用集合減法 – jnblanchard
0.00490117073059082 vs 0.0463278293609619在時間測量。我的答案更快。 – jnblanchard
我認爲你需要更具體地說明你的意思是「不匹配」。你是否指'array2'中不在'array1'中的值?如果'array2'有三個「4」 - 如果其中兩個進入'resultsArray'或零?或者你的意思是在同一個地方不匹配的值,所以'[1,2,3]'和'[3,1,2]'在'resultsArray'中會有1,2和3? –