清除所有阵列列表数据

lol*_*ola 10 c#

为什么下面的代码没有清除所有数组列表数据?

        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).


Joh*_*nny 9

`Array.Clear()` 
Run Code Online (Sandbox Code Playgroud)

删除数组中的所有项目.

`Array.RemoveAt(i)` 
Run Code Online (Sandbox Code Playgroud)

删除数组中第i个索引的元素.


Pra*_*ana 6

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