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

下面是一些代码:

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

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


当前回答

斯威夫特5

guard let index = orders.firstIndex(of: videoID) else { return }
orders.remove(at: index)

其他回答

我提出了以下扩展,负责从数组中删除元素,假设数组中的元素实现了Equatable:

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]

这应该做到(未测试):

animals[2...3] = []

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

扩展删除字符串对象

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()

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

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

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