我正在寻找一种有效的删除方法来处理列表。这种情况如下:
比如说我有一个(可能)大量的名字列表:
Alex Smith
Anna Hobb
Bertie Blackman
Bill Clinton
David Smith
David Warner
George Jung
George Washington
William Wobbits
假设这是一个 List<Person>
具有属性的人 FirstName
和 LastName
.如示例中所示,两个人可能共享相同的 FirstName。例如,我需要做的是遍历列表并删除所有 Davids。
我循环查找所有大卫,添加到列表 DeletePerson
,然后为每个 DeletePerson
再次循环和删除。我确定会有更有效的方法吗?效率在这个应用程序中并不重要,但它似乎是一种冗长的方式来做到这一点,而且我想在名字中的字母 D 之后我们知道我们不会再向 DeletePerson
添加任何内容。列表(假设列表按字母顺序排序)
谢谢!
最佳答案
更新的答案:
如果我们不允许使用为我们完成所有工作的 RemoveAll
或 LINQ 函数,这是一种更“手动”完成的方法:
List<Person> newPersons = new List<Person>();
foreach (Person person in persons)
{
if (person.FirstName != "David")
newPersons.Add(person);
}
persons = newPersons();
新列表的构建在 .NET 中非常快。一个一个地删除项目很慢,因为首先必须在列表中找到要删除的每个元素,然后当它被删除时,列表的其余部分必须向上移动以填补空白。这比我上面给出的方法要慢得多。
为了使删除操作更快,列表可以按排序顺序或按名字分组。但是列表的初始创建会比较慢。
旧答案:
您似乎对简洁的解决方案感兴趣,而不是具有最佳性能的解决方案。如果您使用的是 .NET 3.5,则可以使用:
persons = persons.Where(person => person.FirstName != "David").ToList();
哦,List 有一个 RemoveAll 方法:
names.RemoveAll(person => person.FirstName == "David");
(注意 Jimmy 在我之前发布了 RemoveAll
想法。)
关于c# - 为列表编写删除名称循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375902/