我目前有一个名为regkey的列表和一个名为line_to_delete的字符串,我显然想从列表中删除它。目前我正在搜索列表中的一个元素,一次创建子字符串,因为line_to_delete仅表示我要删除的行的一部分,但在列表中是唯一可识别的。
无论如何,我真正需要做的是提高效率,减少资源使用并加快速度,有没有办法做到这一点?
答案 0 :(得分:6)
如果是List<string>
:
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);