array.remove 似乎出于未知原因跳过元素



不知何故,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"]

i0时,"zero"将被删除,留下一系列...

["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]

i1时,"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 将删除"两个"。根据您编写的代码,您的输出是完全预期的。

最新更新