C#如何从List<int>中移除一个整数?

3

我有一个整数列表:

var list = new List<int>();
list.Add(1);
list.Add(1);
list.Add(2);
list.Add(2);
list.Add(3);
list.Add(3);
list.Add(2);
list.Add(2);

我想从列表中删除所有的1,我使用了以下代码:

list.RemoveAll(x => list.contains(1));

但它将列表中的所有内容都删除了,而我只想删除1s,这会使计数为8的列表变成计数为6的列表。


正如下面的答案所指出的那样,list.contains(1) 明显不是你要查找的测试;然而,有趣的是它不起作用。假设列表按顺序串行遍历,似乎在第一次和第二次删除后,列表将不再包含 1。我很想听听有人为什么不起作用的解释。否则,也许有一天我会自己检查它 :-) - rileywhite
2
@rileywhite 在移除任何项之前,似乎已经完成了所有检查:https://dotnetfiddle.net/L3WJLC - dcastro
1
如果您有时间,可以在此处查看实际的实现方式 - dcastro
@dcastro 很有趣。看起来它先决定要删除什么,然后再将其删除。在决策步骤中,列表包含所有原始元素。这就是为什么 list.contains() 总是返回 true。感谢您让我每天受益 :-) - rileywhite
注意 - 这个是有效的:var list = new List<int> {1, 1, 1, 2, 3, 4}; - Kobi
4个回答

17

你的代码当前读作:对于列表中的每个元素,如果列表包含“1”,则从列表中删除它。由于所有元素都符合这个条件,因此所有元素都会从列表中被删除。

你需要指定的是:对于列表中的每个元素,如果该项为1,则将其从列表中删除。

list.RemoveAll(item => item == 1);

4

更改

list.RemoveAll(x => list.contains(1));

to

list.RemoveAll(x => x == 1);

3
list.RemoveAll(item => item == 1);

0

你也可以尝试以下代码:list.RemoveAll(x=> x.Equals(1));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接