我有一个清单
key ParentKey
1 Null
2 1
3 Null
4 Null
5 1
6 4
7 6
8 3
我想把它分类
key ParentKey
1 Null
2 1
5 1
3 Null
8 3
4 Null
6 4
7 6
通过 linq 如何做到这一点?任何帮助都是最好的
假设结果应该是:
key ParentKey
1 Null
2 1
5 1
3 Null
8 3
4 Null
6 4
7 6
我可以说,如果没有逻辑可以将该位置的空值放入列表中,那么您将无能为力。
因此,使用 Linq,您可以使用OrderBy()函数对列表进行排序:
list = list.OrderBy(x => x.ParentKey).ToList();
但是使用这个函数,结果如下:
key ParentKey
1 Null
3 Null
4 Null
2 1
5 1
8 3
6 4
7 6
如果你有一份清单
public class MyObject{
int Key {get;set;}
int ? ParentKey{get;set;}
}
然后对该列表进行排序,请使用:
var list = new List<MyObject>(){ new MyObject{ Key = 1 , ParentKey = null } , new MyObject{Key=2 , PatentKey = 1} /* and so on */};
var sortedList = list.OrderBy(o=>o.ParentKey , new MyComparer());
public class MyComparer : IComparer<MyObject>
{
public int Compare(MyObject o1, MyObject o2)
{
if (ol.HasValue && o2.HasValue)
{
if (ol.ParentKey.Value == o2.ParentKey.Value)
return 0;
return ol.ParentKey.Value > o2.ParentKey.Value ? 1 : -1;
}
else
return 0;
}
}
这将产生准确的预期序列
我相信你想要在这里实现的是树的DFS有序打印。
Linq 无法帮助您(至少开箱即用)。
我建议使 DFS 实现适应您的数据结构。请参阅Eric Lippert 的建议。