4

我有一个未排序的整数列表:

1 3 1 2 4 3 2 1

我需要对其进行排序,并在每组相等的数字之前,插入一个 0:

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

有没有办法只用一个 LINQ 语句从第一个列表到第二个列表?我被困在

from num in numbers
orderby num
select num

然后是一个 foreach 循环,该循环根据这些结果手动构造最终输出。如果可能的话,我想完全消除第二个循环。

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 回答
1

在 LinqPad 上试试这个。

var list = new int[]{1, 3, 1, 2, 4, 3, 2, 1};
var q = from x in list
        orderby x
        group x by x into xs
        from y in (new int[]{0}).Concat(xs)
        select y;
q.Dump();

这应该会给你想要的结果。

于 2013-05-20T17:45:57.547 回答