-1

LINQ を使用して IEnumerable リスト内の項目を並べ替えることは可能ですか?

例えば:

        IEnumerable<sample> sam = new List<sample>()
        {
            new sample{ id = 1, name = "sample 1", list = new List<int>{5,6,1}},
            new sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
            new sample{ id = 3, name = "sample 1", list = new List<int>{8,3,7}},
            new sample{ id = 4, name = "sample 1", list = new List<int>{8,4,3}},
            new sample{ id = 5, name = "sample 1", list = new List<int>{5,1,7}},
            new sample{ id = 6, name = "sample 1", list = new List<int>{6,9,7}}
        };

上記のサンプルから期待される出力は、リスト内の並べ替えられた値になります。予想される出力は次のとおりです。

sample{ id = 1, name = "sample 1", list = new List<int>{1,5,6}},
sample{ id = 2, name = "sample 1", list = new List<int>{2,9}},
sample{ id = 3, name = "sample 1", list = new List<int>{3,7,8},
sample{ id = 4, name = "sample 1", list = new List<int>{3,4,8}},
sample{ id = 5, name = "sample 1", list = new List<int>{1,5,7}},
sample{ id = 6, name = "sample 1", list = new List<int>{6,7,9}}

ありがとう

4

3 に答える 3

0
((List<sample>)sam).ForEach(s => s.list.Sort());
于 2012-09-03T02:56:37.770 に答える
0

LINQ の一般的な形状は、元のデータを変更しないことです。たとえば、リストがある場合

var ints = new  List<int>{5,6,1};

linqを使用して「並べ替え」ます

var sorted = ints.OrderBy();

最終的に2つのリストになります

ints => { 5,6,1}
sorted => {1,5,6}

上記の例では、出力を何にしたいかによって異なります

リストがソートされているサンプルの新しいリストが必要な場合は、次を使用できます

var newSampleList = samples.Select( sam => new Sample { 
                                                 id = sam.id, 
                                                 name = sam.name, 
                                                 list = new List<int>(sam.list.OrderBy())
                                   });

新しいリストを作成したくないが、その場で値をソートしたい場合、実際にはLINQが意図したものではありませんが、AVDの回答のようなものを使用して各メンバーで機能を実行できます(この場合はSort onを呼び出します)リスト)。

注: これは、Sort() が List<> にのみ存在するため、sample.list が List() として定義されている場合にのみ機能します。IList または IEnumerable として定義されている場合、機能しません。

于 2012-09-03T09:01:29.237 に答える