Использование словаря, когда ключ и значение совпадают? - PullRequest
4 голосов
/ 09 марта 2009

Я хочу хранить около 30 строк в статической «коллекции». Затем мне нужно проверить путь входящего веб-запроса по этому списку.

Я думал об использовании StringDictionary с ключом и значением, имеющими одинаковые значения. Однако, это просто странно, когда все, что я действительно хочу, это поиск ключа, поэтому я могу проверить существование, а не искать значение для использования.

Я ни о чем не беспокоюсь?

Pat

Ответы [ 3 ]

9 голосов
/ 09 марта 2009

Какой язык вы используете?

.NET поддерживает Hashset <> , что соответствует тому, что вы описываете.

4 голосов
/ 09 марта 2009

Я согласен с комментариями о том, для чего предназначен набор - но это также тот случай, когда до версии 3.5 .NET не имел тип набора. Самым близким, что вы могли легко получить (используя только встроенные библиотеки и не записывая свой собственный набор), был словарь, значение которого не имеет значения.

Однако мне интересно, может быть, для 30 строк в .NET ранее, чем 3.5, List<string> может не быть билетом. Мы знаем, что хэш-наборы действительно хорошо работают для больших наборов, но , если вы знаете, что используете небольшой набор строк, простой вызов List<string>.Contains будет довольно быстрым. String.Equals может проверять длину для начала, а затем проверять каждый символ, так что он, вероятно, очень быстро отклонит несоответствия.

Короче говоря, я бы, вероятно, использовал HashSet<string>, если вы используете .NET 3.5, List<string>, если вы используете .NET 2.0 или 3.0, и, возможно, ArrayList, если вы используете .NET 1.1 , Это должно дать самый простой код вызова, и производительность, вероятно, будет хорошей. Если вы считаете, что это становится узким местом, докажите это с помощью профилировщика.

4 голосов
/ 09 марта 2009

Если вам просто нужен поиск ключа для проверки существования, используйте вместо него Set.

...