清除所有阵列列表数据

时间:2010-05-19 06:02:47

标签: 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

为什么要在屏幕上打印10张?

也许有另一个特殊功能,删除一切?

6 个答案:

答案 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() == 10i == 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代替其他人提到过。