不知何故,array.remove
似乎在做奇怪的事情。这是代码:
var test = "zero one two three four five six seven eight nine ten eleven"
var testarray = test.components(separatedBy: " ")
for i in 0..<4{
testarray.remove(at: i)
}
print(testarray)
上面的代码应该给出:
["四"、"五"、"七"、"八"、"九"、"十"、"十一"]
因为它应该删除从 0 到 4th 的值,但它跳过并只删除偶数。
["一"、"三"、"五"、"七"、"八"、"九"、"十"、"十一"]
所以,你从一个看起来像...
["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
当i
0
时,"zero"
将被删除,留下一系列...
["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
当i
1
时,"two"
将被删除,留下一系列...
["one", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
某某。 发生这种情况是因为您不断移动索引。
那么,如何删除前 4 个元素?
好吧,您可以在每次迭代中删除元素0
,但这很无聊。
你可以做一些类似的事情...
let prefix = testarray[0..<4]
// ["zero", "one", "two", "three"]
或
let sufix = testarray[5..<testarray.count]
// ["five", "six", "seven", "eight", "nine", "ten", "eleven"]
或
let remaining = testarray[5...]
// ["five", "six", "seven", "eight", "nine", "ten", "eleven"]
或
testarray.removeSubrange(0..<4)
// ["four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
或
testarray.removeFirst(4)
// ["four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
或
testarray.dropFirst(4)
// ["four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
这可能是更安全的方法之一,因为它可以让您"丢弃"更多元素,然后存在而不会失败
。根据您的需求和偏好
每次执行删除时,数组元素的索引都会更改。最初,您的数组包含零、一、二、三、....
删除第 0 个元素("零"(后,它包含 1、2、3、....
此时,删除元素 1 将删除"两个"。根据您编写的代码,您的输出是完全预期的。