Требуется: .Net коллекция, которая хранит кучу строк без учета регистра быстро и эффективно - PullRequest
6 голосов
/ 14 января 2011

Я ищу простую коллекцию, которая будет хранить кучу строк без учета регистра .Мне нужен хотя бы метод Contains() и Remove(), чтобы увидеть, присутствует ли определенная строка, и удалить эту строку.

Я пробовал List<string>, но этот регистр чувствителенМне нужно было бы использовать регистронезависимый Dictionary<TKey, T>, но это "ощущается" как пустая трата места.Выполнение ToLower() для каждой строки - пустая трата производительности.

Кто-нибудь знает, какую коллекцию .Net мне следует использовать?

Ответы [ 5 ]

18 голосов
/ 14 января 2011

Вы должны использовать new HashSet<string>(StringComparer.OrdinalIgnoreCase).
Обратите внимание, что это неупорядоченный набор.

2 голосов
/ 14 января 2011

Вы можете использовать StringDictionary.

0 голосов
/ 09 марта 2011

По умолчанию словарь не учитывает регистр. Но вы можете реализовать свой собственный вариант, чтобы сделать его нечувствительным. (Я могу ошибаться в этом: D)

У меня возникла та же проблема со словарем, но затем, после многих попыток реализации IEquality, я окончательно свел счёт с LINQ.

string k = customers.Where(c => c.Key.Equals(valueToSearch, StringComparison.OrdinalIgnoreCase)).FirstOrDefault().Key;

if (!string.IsNullOrEmpty(k) && k.ToUpper() == valueToSearch.ToUpper())
{
    // Do some thing
}

Надеюсь, это поможет кому-нибудь в будущем.

Санджай Залке

0 голосов
/ 14 января 2011

Пришлось решить ту же проблему сегодня. Если вы можете включить Linq, то ваш список получит перегруженные методы с помощью компаратора.

using System.Linq;

List<string> stringList = new List<string>();
stringList.Contains("hello", StringComparer.OrdinalIgnoreCase);

Надеюсь, это поможет: Martin

0 голосов
/ 14 января 2011

Напишите свои собственные Contains() и Remove() методы, которые выполняют сравнение без учета регистра.

...