Есть ли словарь <Key, Value> без уникального ключа?
Возможный дубликат:
Дублировать ключи в словарях .NET?
Мне нужно создать Collection<string,object>
, одна строка, а другая - объект.
Я не могу использовать словарь, потому что ни один из элементов не является уникальным.
Есть ли способ создать List<T,T>
? Поскольку я не хочу создавать объект для хранения обоих значений, просто чтобы использовать его в одном цикле foreach.
Спасибо
Ответы
Ответ 1
Попробуйте List<Tuple<string, object>>
. Затем вы можете получить обычную поддержку linq над списком, чтобы получить в каждом Tuple<string, object>
.
Tuple<,>
class доступен начиная с .NET 4, но вы можете легко имитировать собственный тип кортежа без много хлопот.
Я думаю, что кортежи считаются равными на основе их значений элементов, но с object
это, скорее всего, будет ссылкой равным и, следовательно, не должно быть равным... если это имеет смысл!
Подробнее о равенстве здесь:
Удивительное равенство в кортеже (в)
Update:
Если вам нужно связать список элементов с ключом для целей поиска, ответ на дублированный вопрос правильно отобразит Lookup
(в вашем случае Lookup<string, object>
), который выражает ваше намерение немного яснее, чем List<Tuple<string, object>>
.
Ответ 2
Попробуйте создать свой собственный класс и использовать его
class KeyValue<Tkey,TValue>
{
public Tkey Key {get;set;}
public TValue Value {get;set;}
}
используйте как
List<KeyValue<string,string>> list = new List<KeyValue<string,string>>();
Ответ 3
вы можете использовать
List<KeyValuePair<string,object>>
или
Dictionary<string,List<object>>
Ответ 4
Возможно, вы могли бы создать список кортежей, используя класс Tuple? Что-то вроде этого:
List<Tuple<String, Object>> list = new List<Tuple<String, Object>>();
Ответ 5
Если вы используете .NET 4, вы можете использовать объект Tuple (http://msdn.microsoft.com/en-us/library/system.tuple.aspx):
var list = new List<Tuple<string, object>>();
если вы используете более раннюю версию .NET, вы можете сами реализовать класс Tuple: Эквивалент Tuple (.NET 4) для .NET Framework 3.5
Ответ 6
Считаете ли вы использование "Группировать по", а затем сгруппированный результат в словарь?