15

グループの順序を乱すことなく、グループ自体の中で自然なグループ化を持つコレクションを注文することは可能ですか (できれば LINQ を使用)。

説明させてください。私はこのようにコレクションを持っています:

        List<grpitem> list = new List<grpitem>()
        {
             new grpitem() {groupCode="1", item="a"},
             new grpitem() {groupCode="1", item="b"},
             new grpitem() {groupCode="1", item="c"},
             new grpitem() {groupCode="2", item="a"},
             new grpitem() {groupCode="2", item="c"},
             new grpitem() {groupCode="2", item="b"},
             new grpitem() {groupCode="3", item="c"},
             new grpitem() {groupCode="3", item="b"},
             new grpitem() {groupCode="3", item="a"}
        };

これが到着する順序 (groupCode の順序) は、別の場所で決定されます。コレクションを並べ替えて、各グループ内で要素がアイテムの値順に並べられるようにする必要があります。つまり、次のようになります。

             {groupCode="1", item="a"},
             {groupCode="1", item="b"},
             {groupCode="1", item="c"},
             {groupCode="2", item="a"},
             {groupCode="2", item="b"},
             {groupCode="2", item="c"},
             {groupCode="3", item="a"},
             {groupCode="3", item="b"},
             {groupCode="3", item="c"},

コレクションは、groupCode の順序 "2"、"3"、"1" などで同じように到着する可能性があります。私はそれを邪魔してはいけません - 各グループ内の要素を並べ替える必要があるだけです。

LINQ クエリは本当に便利です。(たぶんぼんやりしているけど、まだ見つけられていない)

私はこれを試しました:

        var reOrdered = (from x in list
                          group x by x.groupCode into groups
                          select groups)
                         .OrderBy(i => from j in i select j.item)
                         .SelectMany(i => i);

しかし、「少なくとも1つのオブジェクトはIComparableでなければなりません」というエラーが表示され、困惑します。

最後に、これは .Net3.5 以降の C# でなければなりません。

4

1 に答える 1