4

int のソートされていないリストがあります。

1 3 1 2 4 3 2 1

私はそれを並べ替える必要があり、等しい数字の各グループの前に 0 を挿入します。

0 1 1 1 0 2 2 0 3 3 0 4

LINQ ステートメントを 1 つだけ使用して、最初のリストから 2 番目のリストに移動する方法はありますか? 私は立ち往生しています

from num in numbers
orderby num
select num

その後、これらの結果に基づいて最終出力を手動で構築する foreach ループが続きます。可能であれば、2 番目のループを完全に排除したいと考えています。

4

3 に答える 3

8

試す:

list.GroupBy(n => n)
      .OrderBy(g => g.Key)
      .SelectMany(g => new[] { 0 }.Concat(g))

数値のグループごとに、先頭に 0 を追加し、リストを で平坦化しSelectManyます。

そしてクエリ構文では:

from num in list
group num by num into groupOfNums
orderby groupOfNums.Key
from n in new[] { 0 }.Concat(groupOfNums)
select n
于 2013-05-20T17:37:08.883 に答える
6
int[] nums = { 1, 3, 1, 2, 4, 3 ,2 ,1};
var newlist = nums.GroupBy(x => x)
                  .OrderBy(x=>x.Key)
                  .SelectMany(g => new[] { 0 }.Concat(g)).ToList();
于 2013-05-20T17:36:30.020 に答える