似乎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删除到第4,但它会跳过而只删除偶数。
[“一个”,“三个”,“五个”,“七个”,“八个”,“九个”,“十个”,“十一个”]
答案 0 :(得分:2)
因此,您从一个看起来像...的数组开始
userReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
num = dataSnapshot.getChildrenCount();
textViewCount.setText(String.valueOf((int)num));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
当["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"
等等。发生这种情况是因为您不断移动索引。
那么,如何删除前4个元素?
好吧,您可以在每次迭代中删除元素["one", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
,但这很无聊。
您可以做类似...
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"]
这可能是更安全的方法之一,因为它可以让您“删除”更多的元素,然后存在而不会失败
...取决于您的需要和偏好
答案 1 :(得分:1)
每次执行删除操作时,数组元素的索引都会更改。最初,您的数组包含零,一,二,三,...。
删除第0个元素(“零”)后,它包含1、2、3,...。
这时,删除元素1将删除“两个”。根据您编写的代码,完全可以预期您的输出。