谁能帮我整理一下这张单子?

本文关键字:一下 张单 | 更新日期: 2023-09-27 18:19:23

我不是最好的程序员,所以需要一些帮助来排序这个列表。我试了几次,但还是得到了一些错误的情况。

基本上列表如下:

#, ID, PreceedingID
A, 1 ,     0
B, 2 ,     3
C, 3 ,     1   
D, 4 ,     2

我想排序它,以便列表遵循前面的id。第一个条目的ID始终是0。

#, ID, PreceedingID
A, 1 ,     0
C, 3 ,     1
B, 2 ,     3   
D, 4 ,     2

你觉得你能帮忙吗?

谢谢!

谁能帮我整理一下这张单子?

如何:

var data = new[] {
    new Row{ Name = "A", ID = 1, PreceedingID = 0},
    new Row{ Name = "B", ID = 2, PreceedingID = 3},
    new Row{ Name = "C", ID = 3, PreceedingID = 1},
    new Row{ Name = "D", ID = 4, PreceedingID = 2},
};
var byLastId = data.ToDictionary(x => x.PreceedingID);
var newList = new List<Row>(data.Length);
int lastId = 0;
Row next;
while (byLastId.TryGetValue(lastId, out next))
{
    byLastId.Remove(lastId); // removal avoids infinite loops
    newList.Add(next);
    lastId = next.ID;
}

在此之后,newList拥有所需顺序的数据。

在上面,Row是:

class Row
{
    public string Name { get; set; }
    public int ID { get; set; }
    public int PreceedingID { get; set; }
}

您可以使用例如字典来排序:

Dictionary<..> d = new Dictionary<..>()
foreach(var el in list){
    d[el.PreceedingID] = el; //put data to dict by PreecedingID
}
List<..> result = new List<..>();
int prec = 0; //get first ID
for(int i = 0; i < list.Length; ++i){
    var actEl = d[prec]; //get next element
    prec = actEl.ID; //change prec id
    result.Add(actEl); //put element into result list
}