gpt4 book ai didi

c# - 一种对目录项进行分组的算法

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

我的任务是根据某些数据结构生成目录文件。数据如下所示:

class ToCItem
{
public Dictionary<int, string> path;
public int page;
}

对于这样的示例数据:

ToCItem
{
path = { 1 => "chapter 1" },
page = 1;
}

ToCItem
{
path = { 1 => "chapter 1", 2 => "section 1" },
page = 2;
}

ToCItem
{
path = { 1 => "chapter 1", 2 => "section 2" },
page = 6;
}

ToCItem
{
path = { 1 => "chapter 1", 2 => "section 2", 3 => "image" },
page = 7;
}

ToCItem
{
path = { 1 => "summary" },
page = 8;
}

我需要这样的输出:

.chapter 1: 1
..section 1: 2
..section 2: 6
...image: 7
.summary: 8

(点是制表符)

我想不出任何算法来做到这一点。我的第一个想法是按每个层次结构级别对项目进行分组并执行如下操作:

foreach (var group in paths.GroupBy(p => p.Path[1]))
{
if (group.Key != null)
{
Console.Write("\t");
Console.WriteLine(group.Key);
}
var grouped2 = group.GroupBy(g => g.Path.ContainsKey(2) ? g.Path[2] : null);
foreach (var group2 in grouped2)
{
if (group2.Key != null)
{
{
Console.Write("\t\t");
Console.WriteLine(group2.Key);
}
}
var grouped3 = group.GroupBy(g => g.Path.ContainsKey(3) ? g.Path[3] : null);
foreach (var group3 in grouped3)
{
if (group3.Key != null)
{
Console.Write("\t\t\t");
Console.WriteLine(group3.Key);
}
}
}
}

但是我只能得到层次结构而不是实际路径。这也不会随着更深的层次结构而扩展。有人有什么想法吗?

最佳答案

+1 罗林的回答。如果您不想使用 LINQ,这里有一个老式的方法来做同样的事情:

public string ItemToString(ToCItem item)
{
var length = item.path.Count;

var builder = new StringBuilder();
builder.Append(new string('\t', length));
builder.Append(item.path[length] + ": ");
builder.Append(item.page);
return builder.ToString();
}

关于c# - 一种对目录项进行分组的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16649916/

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