Правильный способ словаря в значении словаря? - PullRequest
1 голос
/ 21 августа 2011

Я хотел бы знать самое оптимальное / элегантное решение для этого. В основном у меня есть 3 группы данных. Каждая из групп находится внутри другой в иерархии. Я использую словарь в словаре, чтобы достичь этого. Пример кода:

Dictionary<string,Dictionary<string,List<string>>> pro = new Dictionary<string,Dictionary<string,List<string>>>();
        Dictionary<string,List<string>> part = new Dictionary<string,List<string>>();
        List<string> foo = new List<string>();
        List<string> bar = new List<string>();
        foo.Add("foo1");
        foo.Add("foo2");
        foo.Add("foo3");

        bar.Add("bar1");
        bar.Add("bar2");
        bar.Add("bar3");

        part.Add("Part1", foo);
        part.Add("Part2", bar);
        pro.Add("First", part);

        foreach (var pros in pro)
        {
            foreach (var parts in pros.Value)
            {
                foreach (var foos in parts.Value)
                {
                    Console.WriteLine(foos);
                }
            }
        }

Я все еще новичок в c #, хотя мой код работает, я все еще чувствую, что есть более элегантное решение. Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Я думаю, вам следует преобразовать этот вид кода в простые классы-обертки словарей. Это почти не читается таким образом, но если вы создаете класс-оболочку для Parts / Pros, какими бы ни были ваши имена, вы получаете niecer, который смотрит и читает код и может поместить некоторые служебные функции в классы, скрывая детали реализации использования словарей.

1 голос
/ 21 августа 2011

вы можете использовать инициализаторы коллекции для конструкционной части и LINQ для печатной части.

Dictionary<string, Dictionary<string,List<string>>> pro = new Dictionary<string, Dictionary<string,List<string>>>()
{
    { "First", new Dictionary<string,List<string>>()
        {
            { "Part1", new List<string>() { "foo1", "foo2", "foo3" } },
            { "Part2", new List<string>() { "bar1", "bar2", "bar3" } }
        }
    }
};

РЕДАКТИРОВАТЬ: предоставлена ​​новая ссылка для LINQ со ссылкой на другуюполезный связанный пост на stackoverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...