gpt4 book ai didi

c# - 从平面数据创建嵌套列表的最简单方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:35:04 26 4
gpt4 key购买 nike

假设我有以下平面格式的信息,例如对象列表:

List<Line> lines = new List<Line>
{
new Line{Id = 1, Level = 0},
new Line{Id = 2, Level = 1},
new Line{Id = 3, Level = 1},
new Line{Id = 4, Level = 2},
new Line{Id = 5, Level = 2},
new Line{Id = 6, Level = 1},
new Line{Id = 7, Level = 1},
new Line{Id = 8, Level = 2},
new Line{Id = 9, Level = 1}
};

每个对象都有一个 ID 和一个级别。我想以嵌套列表结束。为此,我有一个类(class),可以根据级别列出 child 。

public class NestedLine
{
public int Id;
public List<NestedLine> Children = new List<NestedLine>();
}

将平面列表转换为嵌套列表的最简单方法是什么?

编辑:关于如何构建列表的唯一信息是行的顺序和级别。这应该是结果:

1
--2
--3
--4
--5
--6
--7
--8
--9

最佳答案

这是我的尝试。

调用代码

List<Line> lines = new List<Line>
{
new Line{Id = 1, Level = 0},
new Line{Id = 2, Level = 1},
new Line{Id = 3, Level = 1},
new Line{Id = 4, Level = 2},
new Line{Id = 5, Level = 2},
new Line{Id = 6, Level = 1},
new Line{Id = 7, Level = 1},
new Line{Id = 8, Level = 2},
new Line{Id = 9, Level = 1}
};

NestedLine nestedLine = Recusrsive(lines, 0);

递归方法

private NestedLine Recusrsive(List<Line> lines, int listPos)
{
NestedLine retVal = new NestedLine();
Line line = lines[listPos];

retVal.Id = line.Id;

for (int iItem = listPos + 1; iItem < lines.Count; iItem++)
if (lines[iItem].Level == line.Level + 1)
retVal.Children.Add(Recusrsive(lines, iItem));
else if (lines[iItem].Level <= line.Level) return retVal;

return retVal;
}

关于c# - 从平面数据创建嵌套列表的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com