为什么以下代码不清除所有数组列表数据?
Console.WriteLine("Before cleaning:" + Convert.ToString(ID.Count));
//ID.Count = 20
for (int i = 0; i < ID.Count; i++)
{
ID.RemoveAt(i);
}
Console.WriteLine("After cleaning:" + Convert.ToString(ID.Count));
//ID.Count = 10
为什么要在屏幕上打印10张?
也许有另一个特殊功能,删除一切?
答案 0 :(得分:12)
你实际上只是在调用RemoveAt
10次。当i
达到10时,ID.Count
也将为10。您可以 通过执行以下操作来解决此问题:
int count = ID.Count;
for (int i = 0; i < originalCount; i++)
{
ID.RemoveAt(0);
}
这是一个O(n 2 )操作,因为从列表开头删除一个条目涉及复制其他所有内容。
更有效率(O(n)):
int count = ID.Count;
for (int i = 0; i < originalCount; i++)
{
ID.RemoveAt(ID.Count - 1);
}
或同等但更简单:
while (ID.Count > 0)
{
ID.RemoveAt(ID.Count - 1);
}
但使用ID.Clear()
可能比所有这些效率更高,即使它也是O(n)。
答案 1 :(得分:9)
`Array.Clear()`
删除数组中的所有项目。
`Array.RemoveAt(i)`
删除数组中第i个索引的元素。
答案 2 :(得分:6)
ArrayList.Clear Method
Removes all elements from the ArrayList.
了解更多详情:http://msdn.microsoft.com/en-us/library/system.collections.arraylist.clear.aspx
答案 3 :(得分:2)
使用clear()方法
或
将ID.RemoveAt(i);
更改为ID.RemoveAt(0);
每当从集合中删除元素时,其索引也会更改。因此,当你说ID.RemoveAt(0);
时,索引1处的元素现在将被移动到索引0.所以你再次删除相同的元素(如出队)。直到你到达最后一个元素。但是,如果要一次删除所有元素,可以更好地使用Clear()方法。
答案 4 :(得分:2)
删除10个项目ID.Count() == 10
和i == 10
后,循环停止。
使用ID.Clear()
删除数组列表中的所有项目。
答案 5 :(得分:1)
您的代码确实:
ID.RemoveAt(0);
...
ID.RemoveAt(9);
ID.RemoveAt(10); \\ at this point you have already removed 10
\\ items so there is nothing left on 10- 19, but you are left with
\\ the 'first' 10 elements
...
ID.RemoveAt(19);
一般来说,您的方法会从列表中删除每一个元素..
使用ArrayList.Clear
代替其他人提到过。