- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 MSDN 上,我发现了 Enumerable.GroupBy 方法的以下重载:
public static IEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
Func<TSource, TElement> elementSelector,
Func<TKey, IEnumerable<TElement>, TResult> resultSelector)
以及以下示例:
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age), //keySelector
pet => pet.Age, //elementSelector
(baseAge, ages) => new //resultSelector
{
Key = baseAge,
Count = ages.Count(),
Min = ages.Min(),
Max = ages.Max()
});
虽然我明白这段代码是如何工作的,但我想不出它的实际用途。正如我现在看到的,这将返回一个 Enumerable
,其中包含在代码末尾定义的匿名类型的元素。但为什么 GroupBy 方法会返回一个未分组的枚举?不能通过使用 Select、OrderBy 等来完成同样的事情吗?或者这个重载的主要目的是自己定义一个 Dictionary
作为 TResult
的一部分?
最佳答案
以下两个查询将产生相同的结果。
var queryA = source
.GroupBy(x => x.Id)
.Select(g => new { Id = g.Key, Count = g.Count() });
var queryB = source
.GroupBy(x => x.Id, (key, g) => new { Id = key, Count = g.Count() });
区别在于第一个查询必须实例化一个 IGrouping<TKey, TElement>
每组,而第二个查询没有。你应该更喜欢 queryB
在这种情况下。
关于c# - 带有 resultselector 重载的 Linq GroupBy 方法有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33905631/
Enumerable.GroupBy和 Queryable.GroupBy扩展有 8 个重载。其中两个(对于 Enumerable.GroupBy )是: // (a) IEnumerable Gro
我正在从事 Angular 6 项目。 运行 ng lint 会给出以下警告: “forkJoin 已弃用:resultSelector 已弃用,改为通过管道映射” forkJoin(...obse
Angular Material 文档应用程序中包含以下代码段: // Combine params from all of the path into a single object.
我正在为 Azure Devops 开发一个自定义扩展,它已经包含一个服务端点: "type": "ms.vss-endpoint.service-endpoint-type" 另外,我想创建一个自定
我正在构建一个动态查询,它可以有 n 的 Where 方法调用和 n 的 SelectMany调用取决于用户输入。例如我可能有: var qZ = entityContext.TableA
在 RxJava1 中,flatmap 有一个重载方法,允许您保留源值并将其向下传递到流中。 我从以下博客文章中获得了这些知识 https://medium.com/rxjava-tidbits/rx
在 MSDN 上,我发现了 Enumerable.GroupBy 方法的以下重载: public static IEnumerable GroupBy( this IEnumerable source
我有一个 Driver类型 Bool和一个 BehaviorRelay类型 Page (这是一个自定义枚举)。 enum Page { case option1(CustomClass1, C
在 Angular 6 中 zip 被弃用:tslint 给我以下消息: zip 已弃用:不再支持 resultSelector,改为通过管道映射 如何升级以下代码: import {interval
我是一名优秀的程序员,十分优秀!