Swift:删除所有数组元素

时间:2015-07-02 11:32:08

标签: ios swift

我试图用这样的for循环删除所有数组元素:

for index 1...myArray.count {
   myArray.removeAtIndex(index)
}

但是它不起作用,我在建造之前得到了这个错误:

  

预期';'在'为'声明

10 个答案:

答案 0 :(得分:268)

有一种方法(实际上是一种功能)

myArray.removeAll()

答案 1 :(得分:15)

理所当然地认为@ vadian的回答是解决方案,我只想指出你的代码不起作用。

首先,数组索引是从0开始的,因此您应该相应地重写范围:

for index 0..<myArray.count {
   myArray.removeAtIndex(index)
}

然而,这种实现会导致崩溃。如果您有一个包含10个元素的数组,则最后一个元素占据索引9处的位置。

使用该循环,在第一次迭代时,索引0处的元素被移除,这导致最后一个元素在索引8处向下移动。

在下一次迭代中,索引1处的元素被移除,最后一个元素在索引7处向下移动。依此类推。

在循环中的某个时刻,尝试删除非现有索引的元素将导致应用程序崩溃。

在循环中从数组中删除元素时,最好的方法是以相反的顺序遍历它:

for index in reverse(0..<myArray.count) {
    myArray.removeAtIndex(index)
}

确保删除的元素不会更改仍要处理的元素的顺序或索引。

答案 2 :(得分:7)

如果你真的想要清除数组,最简单的方法是重新初始化它。

答案 3 :(得分:6)

您错过了导致错误的in关键字。代码应该是:

for index in 1...myArray.count {
    myArray.removeAtIndex(index)
}

然而,由于以下几个原因,这将无法正常工作:

  • 最后一个有效索引为count - 1,需要1..<myArray.count
  • 更重要的是,从数组中删除元素会缩短它,从而每次都更改索引。

如果您尝试从阵列中移除所有内容,那么您应该按照其他人的建议和方式进行操作:

myArray.removeAll()

如果您只想要第一个元素而没有别的东西可以获得对第一个对象的引用,请清空该数组,然后重新添加该对象:

var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)

答案 4 :(得分:3)

你的代码应该可以运行,它只是超出范围。

Swift 3

existingArray = []

通过执行此操作,您可以将空数组重新分配给现有数组,并引用数据类型。

或者,您可以使用removeAll删除阵列中的所有元素,并提供保留现有容量的选项。

existingArray.removeAll()

这是一个mutating函数,这意味着调用方法的数组将被更改(空)。

答案 5 :(得分:2)

凯尔走在正确的轨道上,但他的代码将失败,因为在枚举期间可能的指数会减少,从而导致非法指数。

解决它的一种方法是向后枚举。在swift中,这是通过使用 strides 完成的。

for index in stride(from: myArray.count - 1, through: 0, by: -1) {
    myArray.removeAtIndex(index)
}

另一种选择是使用filter()

Swift 1.2

myArray = filter(myArray, { (obj) -> Bool in
    return false
})

Swift 2

myArray = myArray.filter{ (obj) -> Bool in
    return false
}

答案 6 :(得分:1)

Swift 2中有 removeAllObjects()方法

Syntax :  public func removeAllObjects()
Eg.:   mainArray.removeAllObjects

要删除特定索引使用的元素:

Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)

要删除最后一个元素:

Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()

要删除特定范围内使用的元素:

Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)

删除特定元素使用:

Syntax : public func removeObject(anObject: AnyObject)

下面的屏幕截图显示了NSMutableArray扩展

中可用的方法列表

Screenshot 1

答案 7 :(得分:0)

你也可以这样做:

for _ in myArray
{
    myArray.removeAtIndex(0)
}

答案 8 :(得分:0)

Vadian在你想要完成的事情上有正确的答案。您的代码示例显示的问题是由于您尝试创建for循环的方式。默认情况下,Index将从0开始。在它不是创建for循环的正确方法之后添加数字范围。这就是您看到错误的原因。而是按如下方式创建for循环:

for index in myArray.count {
    // Do stuff
}

希望这个答案可以帮助其他新手Swift或编程。

答案 9 :(得分:0)

用于删除数组中的所有数据

yourArrayData.removeAll()