字典值中字典的正确方式?

时间:2011-08-20 20:35:34

标签: c# list dictionary

我想知道这样做的最佳/优雅解决方案。基本上我有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 个答案:

答案 0 :(得分:2)

我认为你应该将这种代码重构为简单的Dictionaries包装类。这种方式几乎是不可读的,但是如果你为Parts / Pros创建一个包装类,无论你的名字是什么,你都会看到并阅读代码,并且可以在类中放入一些实用函数,同时隐藏使用Dictionaries的实现细节。 p>

答案 1 :(得分:1)

您可以使用collection initializers作为构造部件,使用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上另一个有用的相关帖子。