2009-06-24 2 views
5

Законченной с этой ужасной структурой данных:Ищет alterantive к списку <KeyValuePair <строка, KeyValuePair <строка, строка >>>

List<KeyValuePair<string, KeyValuePair<string, string>>> 

Это, вероятно, получить огромные (< 1K я оцениваю) нет и Я буду повторять этот список снова и снова.

Кто-нибудь может подумать о лучшей альтернативе со встроенными типами?

+1

ответы на этот вопрос могут быть полезны http://stackoverflow.com/questions/101825/whats-the- простой способ использования-a-pair-triple-etc-of-values-as-one-value-in-c –

ответ

10

Лучшим вариантом будет обернуть свой собственный класс Tuple, похожий на один shipping in .NET 4.0.

Тогда вы могли бы иметь один:

List<Tuple<string,string,string>> 

Это достаточно просто написать в .NET 2.0 - это в основном просто тройка значений, вместо того, чтобы 2 в KeyValuePair. Однако нет встроенного эквивалентного для триплета значений в .NET 2.0.


Edit:

После прочтения комментария о запросе в другом посте, я думал, что я говорю об этом, а также -

Даже если у вас нет уникальных значений в ключом1, вам может значительно ускорить любой тип запроса/поиска с помощью:

Dictionary<string, List<KeyValuePair<string,string>>> 

Затем, вместо того, чтобы хранить один KeyValuePair, вы можете посмотреть список из них с помощью ключа в первом е lement. Это было бы намного, намного быстрее, если бы вам нужно было найти все элементы с заданным первым ключом ...

+0

Мне нравится версия в словаре - я тоже придумал что-то вроде этого (как своего рода группа по подходу). Вероятно, я собираюсь много раз искать этот словарь в этой строке, которая теперь является ключом – JohnIdol

+0

Я сделал это много раз, и было очень мало проблем. –

10
struct MrStruct 
{ 
    public string Key1, 
    public string Key2, 
    public string Value1 
} 


List<MrStruct>; 

Предполагается, что вы получаете доступ к списку последовательно, как вы сказали, итерации. Потенциально другие структуры данных могут быть быстрее для поиска.

+0

простой и простой - мне нравится - будет ли это работать лучше, чем у меня есть запрос на key1? – JohnIdol

+0

Если ключ1 уникален, вы можете рассмотреть SortedList , иначе вы можете сортировать свой список <> на основе MrStruct.Key1 для производительности. – user7116

+0

Какой тип запросов вы делаете? Если Key1 уникален, использование словаря будет намного, намного быстрее ... –