Array1 = [1, 2, 3, 4, 5, 6]
Array2 = [1,5]
我想得到:
Array1 = [2, 3, 4, 6]
我想通过使用Set
来实现这一点,因为这些数组可能会变大。
同样重要的是我要保持数组的顺序。
答案 0 :(得分:10)
使用第二个数组中的所有元素创建集, 然后过滤第一个数组,只获取不的元素 在集合中:
let array1 = [5, 4, 1, 2, 3, 4, 1, 2]
let array2 = [1, 5]
let set2 = Set(array2)
let result = array1.filter { !set2.contains($0) }
print(result) // [4, 2, 3, 4, 2]
这保留了第一个的订单(和重复的元素) 阵列。如果第二个阵列可能很大,则使用集合是有利的, 因为查找速度更快。
答案 1 :(得分:3)
var array1 = [1, 2, 3, 4, 5, 6]
var array2 = [1,5]
var arrayResult = array1.enumerated()
.filter { !array2.contains($0.0 + 1) }
.map { $0.1 }
print(arrayResult)
[2,3,4,6]
另一种获得相同结果的方法:
<强> 1。用户过滤器
let arrayResult = array1.filter { element in
return !array2.contains(element)
}
<强> 2。使用排序
array2.sorted(by: >).forEach { if $0 < self.array1.count { self.array1.remove(at: $0) } }
使用索引数组删除元素:
字符串和索引数组
let animals = ["cats", "dogs", "chimps", "moose", "squarrel", "cow"]
let indexAnimals = [0, 3, 4]
let arrayRemainingAnimals = animals
.enumerated()
.filter { !indexAnimals.contains($0.offset) }
.map { $0.element }
print(arrayRemainingAnimals)
//result - ["dogs", "chimps", "cow"]
整数和索引数组
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
let indexesToRemove = [3, 5, 8, 12]
numbers = numbers
.enumerated()
.filter { !indexesToRemove.contains($0.offset) }
.map { $0.element }
print(numbers)
//result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
使用其他数组的元素值删除元素
整数数组
let arrayResult = numbers.filter { element in
return !indexesToRemove.contains(element)
}
print(arrayResult)
//result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
字符串数组
let arrayLetters = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
let arrayRemoveLetters = ["a", "e", "g", "h"]
let arrayRemainingLetters = arrayLetters.filter {
!arrayRemoveLetters.contains($0)
}
print(arrayRemainingLetters)
//result - ["b", "c", "d", "f", "i"]
答案 2 :(得分:0)
使用过滤功能
let result = Array1.filter { element in
return !Array2.contains(element)
}
答案 3 :(得分:0)
(注意:因为您添加了问题and maintaining order
,我的答案不再正确,因为Set
不保留订单。然后filter
答案更合适
使用subtracting
中的Set
:
array1 = Array(Set(array1).subtracting(Set(array2)))
您可以将其添加为运算符:
使用安东尼奥提到的阵列→设置→阵列方法,并且操作员的方便,正如弗雷塔格所指出的那样,我对此非常满意:
// Swift 3.x func - <Element: Hashable>(lhs: [Element], rhs: [Element]) -> [Element] { return Array(Set<Element>(lhs).subtracting(Set<Element>(rhs))) }
答案 4 :(得分:0)
let array1 = [1, 2, 3, 4, 5, 6]
let array2 = [1,5]
let array3 = array1.reduce([]) { array2.contains($1) ? $0 : $0 + [$1] }
print(array3) // "[2, 3, 4, 6]\n"