如何在苹果的新语言Swift中取消设置/删除数组中的元素?
下面是一些代码:
let animals = ["cats", "dogs", "chimps", "moose"]
如何将元素animals[2]从数组中移除?
如何在苹果的新语言Swift中取消设置/删除数组中的元素?
下面是一些代码:
let animals = ["cats", "dogs", "chimps", "moose"]
如何将元素animals[2]从数组中移除?
当前回答
鉴于
var animals = ["cats", "dogs", "chimps", "moose"]
删除第一个元素
animals.removeFirst() // "cats"
print(animals) // ["dogs", "chimps", "moose"]
删除最后一个元素
animals.removeLast() // "moose"
print(animals) // ["cats", "dogs", "chimps"]
删除索引处的元素
animals.remove(at: 2) // "chimps"
print(animals) // ["cats", "dogs", "moose"]
删除未知索引的元素
只针对一个元素
if let index = animals.firstIndex(of: "chimps") {
animals.remove(at: index)
}
print(animals) // ["cats", "dogs", "moose"]
对于多个元素
var animals = ["cats", "dogs", "chimps", "moose", "chimps"]
animals = animals.filter(){$0 != "chimps"}
print(animals) // ["cats", "dogs", "moose"]
笔记
上述方法就地修改数组(过滤器除外)并返回被删除的元素。 快速指南地图滤镜减少 如果不想修改原始数组,可以使用dropFirst或dropLast创建一个新数组。
更新至Swift 5.2
其他回答
我使用这个扩展,几乎与Varun的一样,但这一个(下面)是万能的:
extension Array where Element: Equatable {
mutating func delete(element: Iterator.Element) {
self = self.filter{$0 != element }
}
}
关于@Suragch的替代方案“删除未知索引的元素”:
“indexOf(element)”有一个更强大的版本,它将匹配谓词而不是对象本身。它使用相同的名称,但它被myObjects.indexOf{$0调用。property = valueToMatch}。它返回myObjects数组中找到的第一个匹配项的索引。
如果元素是一个对象/结构,您可能希望根据其属性之一的值删除该元素。例如,你有一个Car类拥有Car。color属性,你想从carsArray中删除“红色”汽车。
if let validIndex = (carsArray.indexOf{$0.color == UIColor.redColor()}) {
carsArray.removeAtIndex(validIndex)
}
可以预见的是,您可以通过在repeat/while循环中嵌入上述if语句,并附加一个else块来设置一个“打破”循环的标志,从而重新工作以删除“所有”红色汽车。
你可以这么做。首先确保Dog确实存在于数组中,然后删除它。如果您认为Dog可能在数组中发生多次,则添加for语句。
var animals = ["Dog", "Cat", "Mouse", "Dog"]
let animalToRemove = "Dog"
for object in animals {
if object == animalToRemove {
animals.remove(at: animals.firstIndex(of: animalToRemove)!)
}
}
如果你确定Dog在数组中退出并且只发生了一次,那么就这样做:
animals.remove(at: animals.firstIndex(of: animalToRemove)!)
如果两者都有,字符串和数字
var array = [12, 23, "Dog", 78, 23]
let numberToRemove = 23
let animalToRemove = "Dog"
for object in array {
if object is Int {
// this will deal with integer. You can change to Float, Bool, etc...
if object == numberToRemove {
array.remove(at: array.firstIndex(of: numberToRemove)!)
}
}
if object is String {
// this will deal with strings
if object == animalToRemove {
array.remove(at: array.firstIndex(of: animalToRemove)!)
}
}
}
扩展删除字符串对象
extension Array {
mutating func delete(element: String) {
self = self.filter() { $0 as! String != element }
}
}
要从数组中删除元素,使用remove(at:), removeLast()和removeAll()。
yourArray = [1,2,3,4]
删除2位置的值
yourArray.remove(at: 2)
从数组中移除最后一个值
yourArray.removeLast()
从集合中移除所有成员
yourArray.removeAll()