【发布时间】:2009-05-15 06:01:00
【问题描述】:
我有一个要在 C#.Net 3.5 中排序的对象列表,对象如下
标识 |姓名 | parent_id
1 |超人 |空
2 |蝙蝠侠 | 3
3 |守望者 | 1
4 |金刚狼 | 2
我知道你们中的一些人可能会觉得这很容易,但我需要根据 parent_id 对列表进行排序,它指向同一张表中自己的索引(id)。
那么有人可以给我一个很好的算法来对这个列表进行排序而不会一遍又一遍地循环吗?我真的不能说得那么好,因此我似乎无法在谷歌上搜索到我想要的正确结果。
IEnumerable 或 DataTable 解决方案的集合会很棒。
提前致谢。
编辑:----------------新示例
标识 |姓名 | parent_id
1 |顶级儿童 |空
2 |孩子 C | 3
3 |孩子 B | 4
4 |孩子A | 1
----> 我想要的输出是
标识 |姓名 | parent_id
1 |顶级儿童 |空
4 |孩子A | 1
3 |孩子 B | 4
2 |孩子 C | 3
---->如果我使用OrderBy或Sort,我得到的结果是
标识 |姓名 | parent_id
1 |顶级儿童 |空
4 |孩子A | 1
2 |孩子 C | 3
3 |孩子 B | 4
--> 没有一个解决方案是我真正想要的, 再次抱歉没有说清楚
希望这个例子更清楚
【问题讨论】:
-
我不知道任何 C#,但我确信 C# 中有一种叫做“比较器函数/对象”的东西。 C# 应该有某种用于排序的库函数。只需传入您的集合和比较器函数,它应该能够为您排序集合。
-
我不是 100% 清楚所需的顺序 - “基于 parent_id,它指向同一张表中自己的索引(id)”是什么意思?也许显示所需的输出?
-
编辑后更不清晰了。需要按什么顺序排序。对我来说,1、3、4 是父 ID 的正确排序顺序,而不是 1、4、3
-
不是按序号,而是按父级。 Child A 的 parent_id 为 1(Parent A),Child B 的 parent id 为 4(Child A),Child C 的 parent_id 为 3(Child B),因此应该按顺序显示 child A、B、C
-
我想我明白你在找什么。检查我修改后的比较器。