5

我最终在我的列表中得到了一堆整数(名为“listInts”)。

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

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

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

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

......但我知道这散发出比整个鸡貂更臭的代码气味。

有什么更好的方法?

4

2 回答 2

9
listInts.RemoveAll(t => t < 0)
于 2012-06-02T00:04:25.703 回答
7

我会使用 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 扩展方法,往往会造成混淆(因此妨碍维护)。

于 2012-06-02T00:03:57.210 回答