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)
...但是我知道这个代码的味道比一整个臭鼬的味道更加腥味.
什么是更好的方法?
我会用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扩展方法,则往往会造成混淆(从而妨碍维护).