在循环遍历 C# 中的列表时按数字父子关系对元素进行排序
Sorting elements by number parent-child relationship while looping through a list in c#
我有这样一个列表;
List<int> numbers = new List<int>
{
2,
4,
4,
2,
4,
4,
6,
6,
8,
2,
4
};
我想把它列在下面
2
4
4
2
4
4
6
6
8
2
4
请注意,这些是动态列表。
2 是主要元素 4 是 2 的子元素等..
我用这个例子来进行更简单的解释,我真正想做的是通过带有标签索引的父子关系列出 HTML 个元素。
在此解决方案中列出的理想方式是什么?
根据您的值添加缩进
var list = numbers
.Select(i => new string('\t', i / 2 - 1) + i)
.ToList();
这里有两种方法。
使用 <pre>
和 '\t':
@foreach (var number in numbers)
{
<div class="d-flex flex-row"><pre>@(new string('\t',number))</pre>@number</div>
}
或
使用选择的渲染片段:
@foreach (var number in numbers)
{
<div class="d-flex flex-row">
@for (var i = 0; i < number; i++)
@SomeGap
@number
</div>
}
@code {
List<int> numbers = new List<int>
{
...
};
RenderFragment SomeGap => @<div>gap</div>;
}
您可以通过使呈现片段成为参数或静态来进一步扩展第二种方法。在分层排列中,您可以将深度作为参数传递;
我有这样一个列表;
List<int> numbers = new List<int>
{
2,
4,
4,
2,
4,
4,
6,
6,
8,
2,
4
};
我想把它列在下面
2
4
4
2
4
4
6
6
8
2
4
请注意,这些是动态列表。 2 是主要元素 4 是 2 的子元素等..
我用这个例子来进行更简单的解释,我真正想做的是通过带有标签索引的父子关系列出 HTML 个元素。
在此解决方案中列出的理想方式是什么?
根据您的值添加缩进
var list = numbers
.Select(i => new string('\t', i / 2 - 1) + i)
.ToList();
这里有两种方法。
使用 <pre>
和 '\t':
@foreach (var number in numbers)
{
<div class="d-flex flex-row"><pre>@(new string('\t',number))</pre>@number</div>
}
或
使用选择的渲染片段:
@foreach (var number in numbers)
{
<div class="d-flex flex-row">
@for (var i = 0; i < number; i++)
@SomeGap
@number
</div>
}
@code {
List<int> numbers = new List<int>
{
...
};
RenderFragment SomeGap => @<div>gap</div>;
}
您可以通过使呈现片段成为参数或静态来进一步扩展第二种方法。在分层排列中,您可以将深度作为参数传递;