首页 > 解决方案 > 对自引用父/子列表的子值求和并将父值设置为总和

问题描述

我有一个产品实体列表,这些实体是自引用的,可以无限级别。例如:

Name: Product 1
Parent: null
Value: null

Name: Product 2
Parent: "Product 1"
Value: 20

Name: Product 3
Parent: "Product 2"
Value: null

Name: Product 4
Parent: "Product 3"
Value: 40

Name: Product 5
Parent: "Product 4"
Value: 50

Name: Product 6
Parent: null
Value: null

Name: Product 7
Parent "Product 6"
Value: 30

我正在尝试将具有空值的任何实体设置为具有该实体下所有实体的总和(如果有任何值)。在上面的示例中,我最终会得到:

Name: Product 1
Parent: null
Value: 110

Name: Product 2
Parent: "Product 1"
Value: 20

Name: Product 3
Parent: "Product 2"
Value: 90

Name: Product 4
Parent: "Product 3"
Value: 40

Name: Product 5
Parent: "Product 4"
Value: 50

Name: Product 6
Parent: null
Value: 30

Name: Product 7
Parent "Product 6"
Value: 30

我尝试做一些预处理,将实体存储在哈希图中,但没有成功。

标签: javascriptjavac#

解决方案


将这个平面层次结构转换为真正的层次结构并递归。

public class Node {
  public string Name {get; set;}
  public int Value {get; set;}
  public List<Node> Children = new List<Children>();
}

public int Sum(Node node) {
  int sum = 0;

  foreach(var childnode in node.Children) {
    sum+= Sum(childnode);
  }
  sum+= node.Value
  return sum;
}

//store all nodes
var Nodes = new List<Node>();
foreach(var node in Nodes) {
  if (node.Value = 0) {
   node.Value = Sum(node);
  }
}

推荐阅读