Answers:
有一种方法(实际上是一种功能)
myArray.removeAll()
struct
s,而结构具有functions
不同于的类methods
。
Array
s为struct
秒。这里有经验丰富的Objective-C编码器...
removeAll()
。但是,当视图消失时,删除所有不必要的数据是一种很好的做法(内存规范)。
理所当然的是,@ 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)
}
这样可以确保删除的元素不会更改要处理的元素的顺序或索引。
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }
最好不要全部使用一行,但是代码应该在一行上编译
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }
呢?我对效率还不是很了解,但是通过这种方式,您无需反转范围,所以也许更快。
您缺少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)
count - 1
)。
凯尔(Kyle)走在正确的道路上,但是他的代码将失败,因为枚举期间可能的索引减少,从而导致非法索引。
解决该问题的一种方法是向后枚举。可以通过大步向前迅速完成。
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
另一个选择是使用 filter()
斯威夫特1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
迅捷2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
stride
有removeAllObjects()中夫特2可用的方法
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扩展中可用的方法列表
您也可以这样做:
for _ in myArray
{
myArray.removeAtIndex(0)
}
根据您要完成的工作,Vadian的答案正确。代码示例所显示的问题是由于您尝试创建for
循环的方式引起的。Index
将默认从0开始。在它后面添加数字范围不是创建for循环的正确方法。这就是为什么您看到错误。而是,如下创建您的for循环:
for index in myArray.indices {
// Do stuff
}
希望这个答案能对Swift或编程新手有所帮助。
用于删除数组的所有元素
var array = [1,2,3,4,5,6]()
array.removeAll()