0

我对 Java 很满意

ArrayList<String> list = new ArrayList<>();
Iterator<SignalEvent> it = list.iterator();
while (it.hasNext()) {
    String s = it.next();            
    if(s.equals("delete me")){
        it.remove();
    }
}

不是很开心,但对 C++ 感觉还不错

std::list<MyObject*> mylist;    
for (list<MyObject*>::iterator it = mylist.begin(); it != mylist.end();)
{
    MyObject* se = (*it);
    if(se->bDelete == true)
        it = mylist.erase(it);
    else
        it++;
}

现在谈到 C#,这是最好的方法吗?

你有迭代器的方法吗?

考虑到性能和可读性,您有更好的建议吗?

for( int i = arrayList.Count - 1; i >= 0; i -- )
{
    if( arrayList[ i ].ToString() == "del" )
    {
        arrayList.RemoveAt( i );
    }
}

注意: List.RemoveAll(Predicate match) 必须引入一个新函数,不是吗?

4

2 回答 2

5

如果你不介意创建一个新列表,你可以使用 Linq,这无疑是优雅的:

arrayList.where(x => x.toString() != "del");

或者,如果您仍想从列表中删除内容而不是使用以前的解决方案,请查看是否可以使用 lambda 表达式:

arrayList.RemoveAll(x => x.toString() == "del");
于 2013-07-30T03:45:37.373 回答
1

尝试这个:

ArrayList arryList2 = new ArrayList();
arryList2.Add(100);
arryList2.Add(200);
arryList2.Add(100);

Console.WriteLine(arryList2.Count);

while (arryList2.Contains(100))
    arryList2.Remove(100);
于 2017-02-05T11:19:16.520 回答