Linq 在不更改组顺序的情况下对列表进行排序
我有一个没有订购物品的集合。每个项目都有两个属性:一个用于对它们进行分组,另一个用于在该组中对它们进行排序。我需要生成一个集合,其中项目在组中排序,但组顺序不变 例如,这是输入: (12,0)、(44,0)、(22,1)、(100,0)、(1,0)、(22,3)、(22,2) 如何获得此(以下)输出? (12,0)、(44,0)、(22,1)、(22,2)、(22,3)、(100,0)、(1,0) 注意组Linq 在不更改组顺序的情况下对列表进行排序,linq,sorting,Linq,Sorting,我有一个没有订购物品的集合。每个项目都有两个属性:一个用于对它们进行分组,另一个用于在该组中对它们进行排序。我需要生成一个集合,其中项目在组中排序,但组顺序不变 例如,这是输入: (12,0)、(44,0)、(22,1)、(100,0)、(1,0)、(22,3)、(22,2) 如何获得此(以下)输出? (12,0)、(44,0)、(22,1)、(22,2)、(22,3)、(100,0)、(1,0) 注意组22:它们一起移动到组最先出现的位置,并在它们之间排序 这里是repo(使用C#7.0元组,
22
:它们一起移动到组最先出现的位置,并在它们之间排序
这里是repo(使用C#7.0元组,别忘了在VS2017中瞄准4.7框架):
未注释的部分还对组进行排序,产生错误的输出。然后,我在索引、分组、展平方面遇到了困难(注释部分)。。这不可能有那么难,或者应该是吗?你对问题的描述也是对答案组的描述,然后对每组进行排序。
GroupBy
的定义指定组将按照输入的原始顺序出现在输出中:
var output = input.GroupBy(s => s.A).SelectMany(sg => sg.OrderBy(s => s.B)).ToArray();
var output = input.GroupBy(s => s.A).SelectMany(sg => sg.OrderBy(s => s.B)).ToArray();