如何在苹果的新语言Swift中取消设置/删除数组中的元素?

下面是一些代码:

let animals = ["cats", "dogs", "chimps", "moose"]

如何将元素animals[2]从数组中移除?


当前回答

如果你有一个自定义对象数组,你可以像这样通过特定的属性进行搜索:

if let index = doctorsInArea.firstIndex(where: {$0.id == doctor.id}){
    doctorsInArea.remove(at: index)
}

或者如果你想通过名字来搜索

if let index = doctorsInArea.firstIndex(where: {$0.name == doctor.name}){
    doctorsInArea.remove(at: index)
}

其他回答

如果你不知道你想要删除的元素的索引,并且元素符合Equatable协议,你可以这样做:

animals.remove(at: animals.firstIndex(of: "dogs")!)

参见Equatable协议答案:我如何做indexOfObject或一个适当的containsObject

这应该做到(未测试):

animals[2...3] = []

编辑:你需要让它成为一个var,而不是let,否则它是一个不可变的常数。

我使用这个扩展,几乎与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块来设置一个“打破”循环的标志,从而重新工作以删除“所有”红色汽车。

要从数组中删除元素,使用remove(at:), removeLast()和removeAll()。

yourArray = [1,2,3,4]

删除2位置的值

yourArray.remove(at: 2)

从数组中移除最后一个值

yourArray.removeLast()

从集合中移除所有成员

yourArray.removeAll()