Swift:删除所有数组元素
我试图删除所有数组元素与for循环像这样:
for index 1...myArray.count { myArray.removeAtIndex(index) }
但它不起作用,我在build立之前得到这个错误:
预期';' 在'for'语句中
有一种方法(实际上是一个function)
myArray.removeAll()
理所当然,@ vadian的答案是解决scheme ,我只想指出你的代码是行不通的。
首先,数组索引是基于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) }
这样可以确保删除的元素不会更改要处理的元素的顺序或索引。
如果你真的想清除数组,最简单的方法是重新初始化它。
您错过了导致错误的关键字。 代码应该是:
for index in 1...myArray.count { myArray.removeAtIndex(index) }
然而,这将不会像你所期望的那样有几个原因:
- 最后一个有效索引是
count - 1
,这将需要1..<myArray.count
- 更重要的是,从数组中删除一个元素会缩短它,从而每次更改索引。
如果你试图从数组中删除所有的东西,那么你应该按照其他人的build议和使用:
myArray.removeAll()
如果你只想要第一个元素而没有别的东西你可以得到第一个对象的引用,清空数组,然后重新添加对象:
var firstElement = myArray.first! myArray.removeAll() myArray.append(firstElement)
凯尔在正确的轨道上,但他的代码将失败,因为可能的指数在枚举期间减less,导致非法指数。
解决这个问题的一个方法是向后列举。 在迅速这是通过使用大步完成。
for index in stride(from: myArray.count - 1, through: 0, by: -1) { myArray.removeAtIndex(index) }
另一个select是使用filter()
Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in return false })
Swift 2
myArray = myArray.filter{ (obj) -> Bool in return false }
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扩展中可用的方法列表
你的代码应该可以工作,它只是出了界限。
Swift 3
existingArray = []
通过这样做,可以将空数组重新分配给现有的数组,并引用数据types。
或者,您可以使用removeAll
删除arrays中的所有元素,并提供一个选项来保留现有的容量。
existingArray.removeAll()
这是一个mutating
函数,这意味着调用该方法的数组将被更改(空)。
你也可以这样做:
for _ in myArray { myArray.removeAtIndex(0) }
Vadian在你想要完成的事情上有正确的答案。 由于您的代码示例而显示的问题是由于您尝试创buildfor
循环的方式所致。 Index
默认从0开始。 在不是创buildfor循环的正确方法之后添加数字范围。 这就是为什么你看到这个错误。 相反,创build你的for循环如下:
for index in myArray.count { // Do stuff }
希望这个答案能够帮助那些对Swift或编程不熟悉的人。