2010-05-22 6 views
4

Мне нужно что-то вроде словаря или SortedList, но я продолжаю получать исключения, когда они получают две вещи, которые одинаковы ... Есть ли другой способ?Словарь с точными одинаковыми ключами и значениями

Благодаря

+0

Вы можете скачать PRISM и использовать класс ListDictionay. – SwDevMan81

ответ

0

Ключ в словаре или отсортированный список ключ должен быть уникальным: это цель. Хеш-таблицы Вместо этого вы можете использовать List<KeyValuePair<TKey, TValue>> или KeyValuePair<TKey, TValue>[], но, конечно, вы не сможете найти значение по ключу, поскольку у вас могут быть дубликаты.

0

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

Вы можете проверить, прежде чем добавлять элемент, например. dic.ContainsKey(key) или list.Contains(item) перед добавлением.

Если вы хотите, чтобы иметь возможность добавлять несколько значений для одного ключа, вы можете использовать NameValueCollection.

4

Возможно, вы хотите получить multimap. Вы можете имитировать один с Dictionary<Key, List<Value>>. Также см. this question, он имеет несколько реализаций мультимапов.

4

Я предполагаю, что вы используете

dictionary.Add(key, value); 

Если вы счастливы только замена существующую пару ключ/значение, а затем просто использовать индексатор:

dictionary[key] = value; 

Если вы хотите иметь несколько значений для одного и того же ключа, см. другие ответы :)

+0

Прошу прощения, но вы только что напомнили мне о моем любимом факте Джона Скита: если у вас есть 5 долларов, а у Jon Skeet 5 долларов, у Jon Skeet больше денег, чем у вас. Лол. :) ... +1 – 2010-05-22 18:44:31

+0

Я фактически использую его для хранения информации о письмах. Я использую Ключ для хранения электронной почты отправителей, и значение удерживает предмет сообщения электронной почты – 2010-05-22 18:50:19

+0

@ j-t-s: Так что же такое * значение * в том, что существует более одного письма от конкретного пользователя? Вам нужно хранить все предметы или только последнюю? –

0

Если вы запрашиваете, это словарь, где значение совпадает с значением , тогда в пространстве имен System.Collections.Generic существует общий тип коллекции с именем «HashSet», который выглядит так, как будто он служит этой цели.

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

HashSet:

http://msdn.microsoft.com/en-us/library/bb359438.aspx

Смежные вопросы