0

特定のルールでリストを並べ替えるのに問題があります。

実際には、Links Object List For Example List list があります。

このように構築されたリンククラス:

private class Links
 { 
            public Int32 IdHost { get; set; }
            public String Url { get; set; }
 }

このコードを使用して、リストを IdHost で並べ替えます。

var listSortedById = source
                     .OrderBy(n => n.IdHost).ToList();

この問題は、idHost == 2 を 5 つの要素ごとに 1 つではなくリストに配置する必要があるためです。

更新の例

例: 2 1 1 1 3 3 3 4 4 4 1 1 1 2 3 3 3 4 4 4 1 1 1 3 3 3 2 4 4 4 5 要素ごとに idHost == 2 を配置することを意味します。

最初に来る要素がidHost == 2であることを望みます.Linqでこれを行う方法はありますか?

4

1 に答える 1

2

自分をそんなに苦しめないでください。考えすぎると、直感的ではない方法で LINQ を使用する非常に手の込んだ複雑なソリューションにたどり着くでしょう。代わりに、KISS。

まず、持っていないアイテムを並べ替えて、IdHost == 2それらのアイテムをリストに入れます。

var sorted = source.Where(x => x.IdHost != 2)
                   .OrderBy(x => x.IdHost)
                   .ToList();

次に、次のアイテムを収集しますIdHost == 2

var twos = source.Where(x => x.IdHost == 2);

最後に、これらの項目を 5 番目ごとにリストに挿入します。

int index = 0;
foreach(var two in twos) {
    sorted.Insert(index, two);
    index += 5;
}
于 2012-04-05T12:39:04.203 に答える