gpt4 book ai didi

c# - ILookup 与 IGrouping

转载 作者:IT王子 更新时间:2023-10-29 03:41:03 27 4
gpt4 key购买 nike

我一直无法阐明 ILookup<TKey, TVal> 之间的差异和 IGrouping<TKey, TVal> ,并且很好奇我现在是否理解正确。 LINQ 通过生成 IGrouping 的序列使问题更加复杂项目同时还给我 ToLookup扩展方法。所以在我仔细观察之前,感觉它们是一样的。

var q1 = 
from n in N
group n by n.MyKey into g
select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>

相当于:

var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>

看起来很像:

var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>

我在下面的类比中是否正确?

  1. IGrouping<TKey, TVal>是单个组(即键控序列),类似于 KeyValuePair<TKey, TVal>其中值实际上是一系列元素(而不是单个元素)
  2. IEnumerable<IGrouping<TKey, TVal>>是这些的序列(类似于迭代 IDictionary<TKey, TVal>
  3. 时得到的结果
  4. ILookup<TKey, TVal>更像是一个IDictionary<TKey, TVal>其中值实际上是一个元素序列

最佳答案

是的,所有这些都是正确的。

ILookup<TKey, TValue>还扩展了 IEnumerable<IGrouping<TKey, TValue>>因此您可以遍历所有键/集合对以及(或代替)查找特定键。

基本想到ILookup<TKey,TValue>就像IDictionary<TKey, IEnumerable<TValue>> .

请记住 ToLookup是“立即执行”操作(立即执行),而 GroupBy被推迟。碰巧的是,当您开始拉取 IGrouping 时,使用“拉取 LINQ”的方式。来自 GroupBy 的结果,它无论如何都必须读取所有数据(因为你不能中途切换组),而在其他实现中它可能能够产生流式结果。 (在 Push LINQ 中确实如此;我希望 LINQ to Events 是相同的。)

关于c# - ILookup<TKey, TVal> 与 IGrouping<TKey, TVal>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337539/

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