0

私はリストを持っています

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経由でこれを行うにはどうすればよいですか? どんな助けでも大歓迎です

4

3 に答える 3

1

結果が次のようになると仮定します。

key ParentKey
1   Null
2   1
5   1
3   Null
8   3
4   Null
6   4
7   6

その位置の null 値をリストに入れるロジックがなければ、何もできないと言えます。

したがって、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
于 2012-06-10T08:49:11.610 に答える
1

あなたがのリストを持っている場合

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;

    }
}

これにより、期待されるシーケンスが正確に生成されます

于 2012-06-10T08:58:40.757 に答える
0

ここで達成したいのは、DFSで注文されたツリーのプリントだと思います。
Linq はそれを手助けすることはできません (少なくともそのままでは)。

DFS の実装をデータ構造に適合させることをお勧めします。Eric Lippert の提案を参照してください。

于 2012-06-10T08:56:56.413 に答える