Более быстрые способы поиска списка С# <String> для подстрок

В настоящее время у меня есть список под названием regkey и строка с именем line_to_delete, которую я, очевидно, хочу удалить из списка. В настоящий момент я просматриваю один элемент списка за один раз, создавая подстроки, так как line_to_delete только представляет часть строки, которую я хочу удалить, но однозначно идентифицируется внутри списка.

В любом случае, что мне действительно нужно сделать, это сделать это более эффективным, использовать меньше ресурсов и быстрее, так что есть ли способы сделать это?

5 ответов

Используйте выражения lamba, если это a List:

list.RemoveAll(x => x.Contains(line_to_delete));


Лучше всего сортировать список и использовать двоичный поиск. SortedList сделает это за вас. Таким образом вы можете получить производительность O (log (n))


Я думаю, что лучше использовать indexOf, чем содержать, что ускоряет поиск

поэтому используйте:

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


Самый простой способ - использовать:

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

Во-первых, убедитесь, что это недостаточно эффективно. Если это не так, вам нужно обратиться к расширенным структурам данных, чтобы представить ваши строки, например trie. Для любых таких вещей нет встроенной поддержки в С#.


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);
</string></string>

или

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

Это сделает ваше удаление более читаемым, но я не уверен в производительности по сравнению с вашим текущим методом.

licensed under cc by-sa 3.0 with attribution.