【发布时间】:2015-06-23 23:18:04
【问题描述】:
我有以下课程
public class TreeNode
{
public string Id { get; set; }
public int Data { get; set; }
public List<TreeNode> Children { get; private set; }
public TreeNode(string node, int data)
{
Id = node;
Data = data;
Children = new List<TreeNode>();
}
public TreeNode(string node, params TreeNode[] children)
{
Id = node;
Children = new List<TreeNode>(children);
}
public override string ToString()
{
return Id;
}
}
这是 n 叉树,其中只有叶节点(没有子节点的节点)才会填充 data 属性。我想使用 LINQ 将此嵌套列表转换为多级字典。例如,如果树如下所示
TreeNode rootNode =
new TreeNode("node-0",
new TreeNode("node-1",
new TreeNode("node-2", 20)),
new TreeNode("node-3", 19),
new TreeNode("node-4",
new TreeNode("node-5", 25),
new TreeNode("node-6", 40)));
我希望使用 LINQ 将上述结构转换为字典(注意:非平面字典),如下所示。我需要根字典作为 LINQ 的结果。我如何完成它。请帮助我。
Dictionary<string, object> d4 = new Dictionary<string, object>();
d4.Add("node-5", 25);
d4.Add("node-6", 40);
Dictionary<string, object> d3 = new Dictionary<string, object>();
d3.Add("node-4", d4);
Dictionary<string, object> d2 = new Dictionary<string, object>();
d2.Add("node-2", 20);
Dictionary<string, object> d1 = new Dictionary<string, object>();
d1.Add("node-1", d2);
d1.Add("node-3", 19);
d1.Add("node-4", d4);
Dictionary<string, object> root = new Dictionary<string, object>();
root.Add("node-0", d1);
【问题讨论】:
-
你试过什么?除了不知道如何开始之外,您的具体问题是什么?
-
Kdopen,我只能将 TreeNode 结构转换为平面字典,类似于 hari 在他的答案中发布的内容。但我无法将其转换为嵌套/多级字典。我也找不到任何类似问题的源代码示例。如果你能帮助我,那就太好了。