Arrays array.remove似乎由于未知原因跳过了元素
不知何故,Arrays array.remove似乎由于未知原因跳过了元素,arrays,swift,Arrays,Swift,不知何故,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) var测试=“0123456789 1011
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)
<代码> var测试=“0123456789 1011”
var testarray=test.components(以:“”分隔)
对于0..中的i,每次执行删除操作时,数组元素的索引都会发生变化。最初,数组包含零、一、二、三、 删除第0个元素(“零”)后,它包含一、二、三、
此时,移除元件1将移除“2”。您的输出完全基于您编写的代码。因此,您可以从一个数组开始,看起来像
["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
let prefix = testarray[0..<4]
// ["zero", "one", "two", "three"]
当i
为0
时,将删除“零”
,留下一个数组
["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
["one", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
当i
为1
时,“两个”
将被删除,留下一个数组
["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
["one", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
诸如此类。这是因为您一直在移动索引
那么,如何删除前4个元素呢
嗯,您可以在每次迭代中删除元素0
,但这很无聊
你可以做一些像
["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
let prefix = testarray[0..<4]
// ["zero", "one", "two", "three"]
或
或
哪种方法可能是更安全的方法之一,因为它允许您“删除”更多元素,然后无故障地存在
。。。根据您的需要和偏好在循环的开始和结束处打印
testarray
和i
的值。很明显,这就是我得到的0,1,1,3,2,5,3,7,0(数组中的第一个)是1,但是0。应该是零好的,因此i
是0
,您删除4
,i
是1
,这使得7
成为下一个元素-跳过5
,因为它现在位于0
:/。相反,循环直到数组长度为0
。问题是在删除元素时需要反转索引<代码>对于步幅中的i(从:3,到:0,by:-1){。顺便说一句,对于步幅中的i(从:3,到:0,by:-1){更容易使用removeFirst(4)
@javaperson尝试(从:3,到:0,by:-1){
但是正如我说的,使用testarray.removeFirst(4)
为什么不简单地testarray[5…]
请注意,如果不检查阵列,可能会导致应用程序崩溃count@LeoDabus我将把它添加到列表中最重要的是告诉OP始终以相反的方式删除它们order@LeoDabus我不知道,您可以使用相同的循环,但始终删除元素0
:/@LeoDabus所有示例“工作”在某种程度上,基于用户提供的可用信息,我个人可能会使用它,但由于“原因”是断章取义的,我会让OP来决定哪一个最能满足他们的需求
testarray.dropFirst(4)
// ["four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]