如何在苹果的新语言Swift中取消设置/删除数组中的元素?
下面是一些代码:
let animals = ["cats", "dogs", "chimps", "moose"]
如何将元素animals[2]从数组中移除?
如何在苹果的新语言Swift中取消设置/删除数组中的元素?
下面是一些代码:
let animals = ["cats", "dogs", "chimps", "moose"]
如何将元素animals[2]从数组中移除?
当前回答
扩展删除字符串对象
extension Array {
mutating func delete(element: String) {
self = self.filter() { $0 as! String != element }
}
}
其他回答
上面的答案似乎假定您知道要删除的元素的索引。
通常,您知道对数组中要删除的对象的引用。在这种情况下,直接使用对象引用可能会更容易,而不必到处传递它的索引。因此,我建议这个解决方案。它使用标识符!==,用于测试两个对象引用是否都引用同一个对象实例。
func delete(element: String) {
list = list.filter { $0 != element }
}
当然,这不仅仅适用于字符串。
鉴于
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
要从数组中删除元素,使用remove(at:), removeLast()和removeAll()。
yourArray = [1,2,3,4]
删除2位置的值
yourArray.remove(at: 2)
从数组中移除最后一个值
yourArray.removeLast()
从集合中移除所有成员
yourArray.removeAll()
我使用这个扩展,几乎与Varun的一样,但这一个(下面)是万能的:
extension Array where Element: Equatable {
mutating func delete(element: Iterator.Element) {
self = self.filter{$0 != element }
}
}
Swift中很少涉及数组操作
创建数组
var stringArray = ["One", "Two", "Three", "Four"]
在数组中添加对象
stringArray = stringArray + ["Five"]
从索引对象中获取值
let x = stringArray[1]
添加对象
stringArray.append("At last position")
在索引处插入对象
stringArray.insert("Going", at: 1)
删除对象
stringArray.remove(at: 3)
Concat对象值
var string = "Concate Two object of Array \(stringArray[1]) + \(stringArray[2])"