我有一個數字陣列。我想找到那些array1不在 中的array2,像這樣:
var array1 = [1, 2, 3, 4]
var array2 = [2, 4, 5, 6]
var result = [1, 3]
我通過回圈遍歷 中的所有數字array2并將它們添加到字典中解決了這個問題。然后我回圈遍歷array1并將那些不在字典中的添加到結果陣列中:
var result: [Int] = []
var numbersDict: [Int : Bool] = [:]
for element in array2 {
numbersDict[element] = true
}
for element in array1 {
if numbersDict[element] == nil {
result.append(element)
}
}
我也想找到那些array2不在的array1
var array1 = [1, 2, 3, 4]
var array2 = [2, 4, 5, 6]
var result = [5, 6]
我已經解決了這個問題:
var result: [Int] = []
var numbersDict: [Int : Bool] = [:]
for element in array1 {
numbersDict[element] = true
}
for element in array2 {
if numbersDict[element] == nil {
result.append(element)
}
}
我怎樣才能以最有效的方式做到這一點?假設這些陣列可能有數十甚至數十萬個數字。我應該使用排序嗎?
uj5u.com熱心網友回復:
只需使用Set.
獲取元素 inarray1但不是 in 的示例array2:
let array1: Set = [1, 2, 3, 4]
let array2: Set = [2, 4, 5, 6]
let result = array1.subtracting(array2)
print(result)
// Prints: [1, 3] <- Order may vary since it is a set
只需將兩組互換即可獲得相反的結果,即 inarray2但不是 in array1。
有很多Set操作,另一種是intersection(_:):
let result = array1.intersection(array2)
print(result)
// Prints: [2, 4] <- Again, no order
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393986.html
