如何从List <int>中删除负值?

B. *_*non 5 c# generics algorithm arraylist

我最终在我的列表中有一堆整数(名为"listInts").

这不应该让任何人感到惊讶.

我的问题是我不想要任何负数,但有可能有三个,特别是-1,-2和-3.

我可以笨拙地删除它们:

if (listInts.Contains(-1) {
    int i = listInts.IndexOf(-1);
    listInts.Remove(i);
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

...但是我知道这个代码的味道比一整个臭鼬的味道更加腥味.

什么是更好的方法?

Por*_*rco 9

listInts.RemoveAll(t => t < 0)
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 7

我会用LINQ:

listInts = listInts.Where(i => i >= 0).ToList();
Run Code Online (Sandbox Code Playgroud)

根据将如何使用,您还可以避免ToList()调用而不是重新保存值:

var positiveInts = listInts.Where(i => i >= 0);
Run Code Online (Sandbox Code Playgroud)

这仍然可以根据需要进行枚举.

如果您需要更改列表,List<T>.RemoveAll实际上是一种更有效的方法:

listInts.RemoveAll(i => i < 0);
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢这个,因为它是一种导致副作用的方法,并且如果您正在使用其他LINQ扩展方法,则往往会造成混淆(从而妨碍维护).