将具有分层结构的字典转换为List

时间:2015-10-17 17:06:14

标签: .net c#-4.0 dictionary collections

我有一个具有层次结构的基本字典对象,其中KEY是子节点,PAIR是其父节点。

以下是字典中键值对的示例数据。

Dictionary<string,string> elements;

("Cell", "Cells")
("Cells", "Tissue")
("Tissue", "Organ")
("Organ", "System")
("System", "Body")

我想将此词典转换为List<string>,维持元素的层次顺序。所以,输出看起来像这样:

"Cell",
"Cells",
"Tissue",
"Organ",
"System", 
"Body"

怎么办呢?提前感谢您的建议。

1 个答案:

答案 0 :(得分:2)

首先,我们可以通过检查字典中的值集合中是否存在这样的键来找到第一个键。然后,我们可以将其添加到List,并使用我们的List集合中的最后一个密钥访问字典中的值来添加所有其他密钥(这有助于我们保持正确的顺序):

        Dictionary<string, string> elements = new Dictionary<string, string>()
        {
            {"Tissue", "Organ"},
            {"Cell", "Cells"},
            {"System", "Body"},
            {"Cells", "Tissue"},
            {"Organ", "System"},
        };

        List<string> hierarchy = new List<string>();

        hierarchy.Add(elements.Keys.First(el => !elements.ContainsValue(el)));

        while(elements.ContainsKey(hierarchy.Last()))
            hierarchy.Add(elements[hierarchy.Last()]);

        foreach (var item in hierarchy)
            Console.Write(item + ",  ");

        Console.ReadKey();

输出:

Cell, Cells, Tissue, Organ, System,  Body,