c# - 为列表编写删除名称循环

标签 c# algorithm list

我正在寻找一种有效的删除方法来处理列表。这种情况如下:

比如说我有一个(可能)大量的名字列表:

Alex Smith
Anna Hobb
Bertie Blackman
Bill Clinton
David Smith
David Warner
George Jung
George Washington
William Wobbits

假设这是一个 List<Person>具有属性的人 FirstNameLastName .如示例中所示,两个人可能共享相同的 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/

相关文章:

c# - WPF 4 中的 VistaBridge 和桌面窗口管理器

algorithm - Radix Sort,对 float 据进行排序

数组比较(逐个元素)

algorithm - Lisp:如何从列表中包含的列表中获取元素的所有可能组合?

python - 生成器到列表转换的不同速度

r - 如何将 `combn` 向量的每个元素的每个组合放入单个列表中

c# - 值不能为空。参数名称 : dataSource. 编辑数据网格并保存到数据库

c# - 在 C# 中为结构创建字节数组成员

java - 从java中的列表中获取列表?

c# - jquery 导致 asp.net 按钮无法点击