为什么下面的代码没有清除所有数组列表数据?
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
Run Code Online (Sandbox Code Playgroud)
为什么10张印在屏幕上?
也许有另一个特殊功能,删除一切?
Jon*_*eet 12
你实际上只打了RemoveAt10次电话.当i达到10时,ID.Count也将是10.您可以通过以下方式解决此问题
int count = ID.Count;
for (int i = 0; i < originalCount; i++)
{
ID.RemoveAt(0);
}
Run Code Online (Sandbox Code Playgroud)
这是一个O(n 2)操作,因为从列表的开头删除一个条目涉及复制其他所有内容.
更有效率(O(n)):
int count = ID.Count;
for (int i = 0; i < originalCount; i++)
{
ID.RemoveAt(ID.Count - 1);
}
Run Code Online (Sandbox Code Playgroud)
或同等但更简单:
while (ID.Count > 0)
{
ID.RemoveAt(ID.Count - 1);
}
Run Code Online (Sandbox Code Playgroud)
但是使用ID.Clear()它可能比所有这些都更有效,即使它也是O(n).
`Array.Clear()`
Run Code Online (Sandbox Code Playgroud)
删除数组中的所有项目.
`Array.RemoveAt(i)`
Run Code Online (Sandbox Code Playgroud)
删除数组中第i个索引的元素.
ArrayList.Clear Method
Removes all elements from the ArrayList.
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息:http://msdn.microsoft.com/en-us/library/system.collections.arraylist.clear.aspx