Insertions with LINQ
本文关键字:LINQ with Insertions | 更新日期: 2023-09-27 18:14:34
我有一个未排序的整数列表:
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循环,该循环根据这些结果手动构造最终输出。如果可能的话,我希望完全消除第二个循环。
尝试:
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
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();
在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();