【发布时间】:2015-07-25 17:25:04
【问题描述】:
我想知道是否有比使用GroupBy() 后跟OrderBy() 更有效的方法从最初的无序列表中按值获取组的有序列表,如下所示:
List<int> list = new List<int>();
IEnumerable<IEnumerable<int>> orderedGroups = list.GroupBy(x => x).OrderBy(x => x.Key);
更多细节,我有一个大的List<T>,我想对其进行排序,但是有很多重复的值,所以我想将结果返回为IEnumerable<IEnumerable<T>>,就像GroupBy() 返回一个@987654327 @ 组。如果我使用OrderBy(),我只会得到IEnumerable<T>,没有简单的方法可以知道值是否从一项更改为下一项。我可以对列表进行分组,然后对组进行排序,但是列表很大,所以最终会很慢。由于OrderBy() 返回一个OrderedEnumerable,然后可以使用ThenBy() 在辅助字段上对其进行排序,因此它必须在内部区分具有相同或不同值的相邻项目。
有什么办法可以利用OrderedEnumerable<T> 必须在内部按值对结果进行分组的事实(以方便ThenBy()),否则使用 LINQ 获取有序列表的最有效方法是什么组?
【问题讨论】:
-
发布您的代码会有所帮助。
-
添加了一个示例实现,希望可以改进
-
你能用 .Distinct() 吗?
-
你能提供一些样本数据和想要的结果吗?
-
Mairaj,Distinct() 真的只是 GroupBy() 的一个特例,我不确定它在这里会有什么帮助