我目前有一个名为regkey的列表和一个名为line_to_delete的字符串,我显然想从列表中删除它。目前,我正在逐个搜索列表的一个元素,创建子字符串,因为line_to_delete仅表示我要删除的行的一部分,但在列表中是唯一可识别的。
无论如何,我真正需要做的是使这更有效率,使用更少的资源并更快速,那么有没有办法做到这一点呢?
我目前有一个名为regkey的列表和一个名为line_to_delete的字符串,我显然想从列表中删除它。目前,我正在逐个搜索列表的一个元素,创建子字符串,因为line_to_delete仅表示我要删除的行的一部分,但在列表中是唯一可识别的。
无论如何,我真正需要做的是使这更有效率,使用更少的资源并更快速,那么有没有办法做到这一点呢?
如果是List<string>
,请使用lambda表达式:
list.RemoveAll(x => x.Contains(line_to_delete));
您最好对列表进行排序并使用二分搜索。SortedList可以为您完成这项工作。这样,您可以获得O(log(n))的性能。
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));
最简单的方法是使用:
var result = list.Where(x => !x.Contains(line_to_delete))
首先,请确保这种方式并不高效。如果不是,您需要采用高级数据结构来表示字符串,例如trie。在C#中没有原生支持这样的数据结构。
我认为使用indexOf比使用contains更好,因为它可以加快搜索速度。
所以应该使用:
regkey.RemoveAll(k => k.IndexOf(line_to_delete) >=0);