更快捷地搜索C#List <string>以获取子字符串</string>

时间:2009-11-04 16:14:31

标签: c# list performance

我目前有一个名为regkey的列表和一个名为line_to_delete的字符串,我显然想从列表中删除它。目前我正在搜索列表中的一个元素,一次创建子字符串,因为line_to_delete仅表示我要删除的行的一部分,但在列表中是唯一可识别的。

无论如何,我真正需要做的是提高效率,减少资源使用并加快速度,有没有办法做到这一点?

5 个答案:

答案 0 :(得分:6)

如果是List<string>

,请使用lambda表达式
list.RemoveAll(x => x.Contains(line_to_delete));

答案 1 :(得分:3)

您最好的选择是对列表进行排序并使用二进制搜索。 SortedList将为您完成此操作。这样您就可以获得O(log(n))性能

答案 2 :(得分:2)

        List<String> regKey = new List<String> { "test1", "test2" };
        var toDelete = regKey.Where(u => u.Contains(line_to_delete)).SingleOrDefault();
        if (toDelete != null)
            regKey.Remove(toDelete);

regkey.RemoveAll(k => k.Contains(line_to_delete));

这将使您的删除更具可读性,但我不确定与您当前的方法相比的性能。

答案 3 :(得分:2)

最简单的方法是使用:

var result = list.Where(x => !x.Contains(line_to_delete))

首先,确保这不够有效。如果不是,则需要使用高级数据结构来表示字符串,例如trie。对于任何此类事情,C#都没有原生支持。

答案 4 :(得分:2)

我认为最好使用indexOf而不是contains,这会加速搜索

所以使用:

regkey.RemoveAll(k => k.IndexOf(line_to_delete) >=0);