Я искал способ хранения и извлечения значений больше, чем единственный ключ, который предоставляет класс классов класса С#.
Поиск по сети (и сам по себе) показал мне пару вариантов:
Словарные словари
.NET 4.0 упрощает поддержку общего класса Tuple <, > . Это означает, что вы можете сделать словарь из любого произвольного Tuple, т.е.
-
var myDict = new Dictionary<Tuple<Char, Int>, MyClass>();
Вложенные словари
Я узнал, что вы также можете вставлять словари в словари, что делает доступ к сохраненному результату аналогичным доступу к N-мерному массиву. Например:
Dictionary<int, Dictionary<int, Dictionary<Char, MyClass>>>
который затем можно было бы использовать: MyClass foo = MyData[8][3]['W'];
Разделимые ключевые слова со сцепленными ключами
Но пока оба работают хорошо для сложных данных и пользовательских классов, я задаюсь вопросом, всегда ли они необходимы. Для примитивных данных, по крайней мере, казалось бы, что сцепление ключей с разделителем так же эффективно.
//keys are char + int
Dictionary<string, MyClass> myDict = New Dictionary<string, Myclass>();
String input = myChar + "|" + myInt
MyClass foo = myDict[input]
Существуют ли какие-либо сценарии, которые делают один из этих методов выше другого? Будет ли у них одинаковое время исполнения? Или следует ли сосредоточиться на том, какой метод обеспечивает самый чистый и простой в обслуживании код?
Мысли?