gpt4 book ai didi

c# - 为 LINQ 伪造 IGrouping

转载 作者:行者123 更新时间:2023-11-30 15:12:36 24 4
gpt4 key购买 nike

假设您有一个大型数据集,该数据集可能会或可能不会根据数据集元素的特定条件进行过滤,这些数据集元素可能需要大量计算。在未过滤的情况下,元素按该条件的值分组 - 条件计算一次。

然而,在过滤已经发生的情况下,尽管后续代码仍然期望看到一个IEnumerable<IGrouping<TKey, TElement>>。集合,执行 GroupBy 没有意义将导致对每个元素第二次重新评估条件的操作。相反,我希望能够创建一个 IEnumerable<IGrouping<TKey, TElement>>通过适本地包装过滤后的结果,从而避免对条件进行另一次评估。

除了实现我自己的提供 IGrouping 的类之外接口(interface),有没有其他方法可以实现这个优化?是否有现有的 LINQ 方法来支持这个给我 IEnumerable<IGrouping<TKey, TElement>>结果?还有其他我没有考虑过的方法吗?

最佳答案

the condition is calculated once

我希望那些 key 还在某处...

如果你的数据是这样的结构:

public class CustomGroup<T, U>
{
T Key {get;set;}
IEnumerable<U> GroupMembers {get;set}
}

您可以使用如下查询来投影此类项目:

var result = customGroups
.SelectMany(cg => cg.GroupMembers, (cg, z) => new {Key = cg.Key, Value = z})
.GroupBy(x => x.Key, x => x.Value)

关于c# - 为 LINQ 伪造 IGrouping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com