原始示范数据如下(只有Level的级数):ID    ParentID  Level
1     0         0
2     0         1
3     0         1
4     0         2
5     0         3
6     0         3
7     0         1
8     0         0
9     0         1
10    0         2
11    0         2
12    0         0
为了按ID顺序生成以下的树形结构:
    0级 1级 2级 3级
 - 1
    - 2
    - 3
       - 4
           - 5
           - 6
    - 7
 - 8
    - 9
        - 10
        - 11
 - 12我需要根据以上的数据中的Level,按ID顺序生成下面的ParentID:ID    ParentID  Level
1     0         0
2     1         1
3     1         1
4     3         2
5     4         3
6     4         3
7     1         1
8     0         0
9     8         1
10    9         2
11    9         2
12    0         0
规律是:
1,8,12为第一层等,以此类推。部分程序如下:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    //原始示例数据。
    List<Data> data = new List<Data>();
    data.Add(new Data { ID = 1,  ParentID = 0, Level = 0, });
    data.Add(new Data { ID = 2,  ParentID = 0, Level = 1, });
    data.Add(new Data { ID = 3,  ParentID = 0, Level = 1, });
    data.Add(new Data { ID = 4,  ParentID = 0, Level = 2, });
    data.Add(new Data { ID = 5,  ParentID = 0, Level = 3, });
    data.Add(new Data { ID = 6,  ParentID = 0, Level = 3, });
    data.Add(new Data { ID = 7,  ParentID = 0, Level = 1, });
    data.Add(new Data { ID = 8,  ParentID = 0, Level = 0, });
    data.Add(new Data { ID = 9,  ParentID = 0, Level = 1, });
    data.Add(new Data { ID = 10, ParentID = 0, Level = 2, });
    data.Add(new Data { ID = 11, ParentID = 0, Level = 2, });
    data.Add(new Data { ID = 12, ParentID = 0, Level = 0, });
    Format(data, 0);
    foreach(var item in data)
    {
        //这里为生成ParentID后的数据。
    }
}
void Format(List<Data> data, int Index)
{
    if (Index < data.Count)
    {
//在这里给ParentID赋值。
        data[Index].ParentID = ...;
        Format(data, Index + 1);
    }
}
class Data
{
    public int ID { get; set; }
    public int ParentID { get; set; }
    public int Level { get; set; }
}

解决方案 »

  1.   

    写一个循环就可以了,不需要Format函数了
     
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
              //原始示例数据。
                List<Data> data = new List<Data>();
                data.Add(new Data { ID = 1, ParentID = 0, Level = 0, });
                data.Add(new Data { ID = 2, ParentID = 0, Level = 1, });
                data.Add(new Data { ID = 3, ParentID = 0, Level = 1, });
                data.Add(new Data { ID = 4, ParentID = 0, Level = 2, });
                data.Add(new Data { ID = 5, ParentID = 0, Level = 3, });
                data.Add(new Data { ID = 6, ParentID = 0, Level = 3, });
                data.Add(new Data { ID = 7, ParentID = 0, Level = 1, });
                data.Add(new Data { ID = 8, ParentID = 0, Level = 0, });
                data.Add(new Data { ID = 9, ParentID = 0, Level = 1, });
                data.Add(new Data { ID = 10, ParentID = 0, Level = 2, });
                data.Add(new Data { ID = 11, ParentID = 0, Level = 2, });
                data.Add(new Data { ID = 12, ParentID = 0, Level = 0, });
                //Format(data, 0);            for(int i=1;i<data.Count;i++)
                {
                    //这里为生成ParentID后的数据。
                    if (data[i].Level == data[i-1].Level + 1)
                    {
                        data[i].ParentID = data[i - 1].ID;
                    }
                    else if (data[i].Level == data[i - 1].Level)
                    {
                        data[i].ParentID = data[i - 1].ParentID;
                    }
                    else
                    {
                        data[i].ParentID = data.Take(i).LastOrDefault(x => x.Level == data[i].Level).ParentID;
                    }                //Console.WriteLine("{0}  {1}  {2}", data[i].ID, data[i].ParentID, data[i].Level);
                }
    }class Data
    {
        public int ID { get; set; }
        public int ParentID { get; set; }
        public int Level { get; set; }
    }