Есть ли преимущества у вложенных или основанных на кортежах -словарей?

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

Поиск в Интернете(и на самом SO)показал мне пару вариантов:

Словари на основе кортежей

.NET 4.0 упрощает поддержку универсального класса Tuple. Это означает, что вы можете сделать словарь из любого произвольного кортежа, т. е.

  • var myDict = new Dictionary, MyClass>();

Вложенные словари

Я узнал, что вы также можете вкладывать словари в словари, что делает доступ к сохраненному результату похожим на доступ к N -размерному массиву. Например:

Dictionary>>

к которому затем мог получить доступ:MyClass foo = MyData[8][3]['W'];

Словари составных ключей с разделителями

Но хотя оба хорошо работают со сложными данными и пользовательскими классами, интересно, всегда ли они необходимы. По крайней мере, для примитивных данных кажется, что объединение ключей с разделителем столь же эффективно.

//keys are char + int
Dictionary myDict = New Dictionary();
String input = myChar + "|" + myInt
MyClass foo = myDict[input]

Существуют ли сценарии, в которых один из этих методов превосходит другой? Будут ли у них одинаковые времена производительности? Или вместо этого следует сосредоточиться на том, какой метод обеспечивает самый чистый и простой в обслуживании код?

Мысли?

16
задан Community 23 May 2017 в 12:18
поделиться