如何在苹果的新语言Swift中从数组中取消设置/删除元素?
以下是一些代码:
let animals = ["cats", "dogs", "chimps", "moose"]
如何从数组中删除元素animals[2]
?
使用索引数组删除元素:
字符串和索引数组
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"]
Equatable
的Array
中删除元素:extension Array where Element: Equatable {
mutating func removeEqualItems(_ item: Element) {
self = self.filter { (currentItem: Element) -> Bool in
return currentItem != item
}
}
mutating func removeFirstEqualItem(_ item: Element) {
guard var currentItem = self.first else { return }
var index = 0
while currentItem != item {
index += 1
currentItem = self[index]
}
self.remove(at: index)
}
}
var test1 = [1, 2, 1, 2]
test1.removeEqualItems(2) // [1, 1]
var test2 = [1, 2, 1, 2]
test2.removeFirstEqualItem(2) // [1, 1, 2]
if let validIndex = (carsArray.indexOf{$0.color == UIColor.redColor()}) {
carsArray.removeAtIndex(validIndex)
}
可以预见,您可以通过在重复/while循环中嵌入上述if语句,并附加else块来设置一个标志以"break"退出循环,从而重新设计它以移除“所有”红色汽车。
Swift 5
guard let index = orders.firstIndex(of: videoID) else { return }
orders.remove(at: index)
animals[2...3] = []
编辑:您需要将其更改为var
,而不是let
,否则它将是一个不可变的常量。
Array
conforms to RangeReplaceableCollection
protocol and it provides a method exactly for this purpose animals.removeSubrange(2...3)
- Leo Dabus2..<3.
。 - Cristik我使用这个扩展,几乎和Varun的一样,但是下面这个是通用的:
extension Array where Element: Equatable {
mutating func delete(element: Iterator.Element) {
self = self.filter{$0 != element }
}
}
要从数组中移除元素,请使用remove(at:)
、removeLast()
和removeAll()
方法。
yourArray = [1,2,3,4]
删除第2个位置的值
yourArray.remove(at: 2)
从数组中删除最后一个值
yourArray.removeLast()
从集合中删除所有成员
yourArray.removeAll()
删除字符串对象的扩展程序
extension Array {
mutating func delete(element: String) {
self = self.filter() { $0 as! String != element }
}
}