c# - LINQ To 对象 GroupBy 方法

标签 c# .net linq

LINQ To Objects GroupBy 方法如何工作?它会为每个键查看整个集合吗?有什么方法可以告诉 GroupBy 方法集合已排序吗?

最佳答案

GroupBy,如果处理得当,将只在一次前向传递中起作用。基本实现(不是他们的)将可比到:

var data = new Dictionary<TKey, List<TValue>>(comparer);
foreach(var item in source) {
    var key = keySelector(item);
    List<TValue> list;
    if(!data.TryGetValue(key, out list))
    {
        data.Add(key, list = new List<TValue>());
    }
    list.Add(itemSelector(item));
}

这基本上是按键分组,为每个唯一的键创建一个包含值的列表。

可以做一些事情,比如与最后一次看到的键进行比较(以帮助排序数据),但是......您需要进行概要分析以了解它是否值得。

关于c# - LINQ To 对象 GroupBy 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076696/

相关文章:

c# - 如何在 XAML 中使用枚举类型?

c# - C#快速生成随机数

c# - 如何使用 MemoryCache 处理成本高昂的构建操作?

linq - 如何使用 LINQ 在 C# 对象上使用 Join、GroupBy 和 Average

c# - 为什么我从 GroupJoin 中得到如此奇怪的结果?

c# - 如何将 "round"二维向量到最近的 15 度

c# - 如何从 C# 将 PWCHAR 传递到 C++ dll

c# - 如何根据引用的dll的文件版本执行不同的语句?

.net - 如何与 .NET 3.5 SP1 Bootstrap 通信

c# - Linq 选择字段