самый быстрый способ найти строку в C #? - PullRequest
6 голосов
/ 21 июля 2010

Какой самый быстрый способ реализовать что-то подобное в C #:

  private List<string> _myMatches = new List<string>(){"one","two","three"};
  private bool Exists(string foo) {
      return _myMatches.Contains(foo);
  }

Обратите внимание, это всего лишь пример.Мне просто нужно выполнить низкоуровневую фильтрацию некоторых значений, которые начинаются как строки.Я мог бы стажировать их, но все равно нужно поддерживать сравнение одной или нескольких строк.Значение: сравнение строк или строк (1 фильтр) или наличие строки в списке строк (несколько фильтров).

Ответы [ 3 ]

18 голосов
/ 21 июля 2010

Вы можете сделать это быстрее, используя HashSet<T>, особенно если вы собираетесь добавить гораздо больше элементов:

private HashSet<string> _myMatches = new HashSet<string>() { "one", "two", "three" };

private bool Exists(string foo)
{
    return _myMatches.Contains(foo);
}

Это побьет List<T>, поскольку HashSet<T>.Contains является операцией O (1).

List<T> Метод Contains, с другой стороны, является O (N).Он будет искать весь список (пока не будет найдено совпадение) при каждом вызове.Это будет медленнее по мере добавления новых элементов.

0 голосов
/ 21 июля 2010

Вы собираетесь в профиль.И вы имеете в виду самый быстрый поиск (т. Е. Учитывается ли время инициализации)?

@ Эльф Кинг уже упоминал Хеш-таблицы, на которые я собирался вам указать (в частности, HashSet<T>)

0 голосов
/ 21 июля 2010

Хеш-таблицы - ваши друзья для быстрого поиска строк.

Посмотрите хороший учебник по Работа с HashTable в C # 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...