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

时间:2012-06-02 00:02:09

标签: c# algorithm generics arraylist

我的列表中有一堆整数(名为“listInts”)。

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

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

我可以通过以下方式笨拙地删除它们:

if (listInts.Contains(-1) {
    int i = listInts.IndexOf(-1);
    listInts.Remove(i);
    // etc.
}

...但我知道这个代码的气味比整个鸡貂的味道更难吃。

什么是更好的方式?

2 个答案:

答案 0 :(得分:9)

listInts.RemoveAll(t => t < 0)

答案 1 :(得分:8)

我会使用LINQ:

listInts = listInts.Where(i => i >= 0).ToList();

根据使用方式的不同,您还可以避免ToList()调用,而不是重新保存值:

var positiveInts = listInts.Where(i => i >= 0);

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

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

listInts.RemoveAll(i => i < 0);

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