ILookup 与 IGrouping

2024-03-23

我一直很难阐明之间的差异ILookup<TKey, TVal> http://msdn.microsoft.com/en-us/library/bb534291.aspx and IGrouping<TKey, TVal> http://msdn.microsoft.com/en-us/library/bb344977.aspx,并且很好奇我现在是否理解正确。 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. An IGrouping<TKey, TVal>是单个组(即键控序列),类似于KeyValuePair<TKey, TVal>其中值实际上是元素序列(而不是单个元素)
  2. An IEnumerable<IGrouping<TKey, TVal>>是这些序列的序列(类似于迭代一个IDictionary<TKey, TVal>
  3. An ILookup<TKey, TVal>更像是一个IDictionary<TKey, TVal>其中值实际上是元素序列

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

And ILookup<TKey, TValue>还延伸IEnumerable<IGrouping<TKey, TValue>>因此您可以迭代所有键/​​集合对以及(或代替)仅查找特定键。

我基本上想到ILookup<TKey,TValue>如同IDictionary<TKey, IEnumerable<TValue>>.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ILookup 与 IGrouping 的相关文章

随机推荐

  • 如何更改/修改 NSPopUpButton 的显示标题

    我想要一个NSPopUpButton显示与所选菜单项标题不同的标题 假设我有一个NSPopUpButton让用户选择货币列表 如何让折叠 关闭按钮仅显示货币缩写而不是所选货币的菜单标题 这是货币的全名 我想我可以重写子类中的绘制 NSPop
  • HTTPS 网站上的 Youtube Iframe

    我使用 https 包含了一个指向网站上 YouTube 视频的 iframe 虽然我使用 https 嵌入了 YouTube 视频 但当我单击播放时 视频会加载 http 文件 从而使浏览器安全图标 不安全 如何强制 youtube 仅加
  • Zxing扫描仪相机变焦

    我已经尝试解决这个问题3天了 但仍然没有找到答案 我想在通过 Zxing 扫描仪扫描二维码时向相机添加 ZOOM 构建 gradle implementation me dm7 barcodescanner zxing 1 9 8 Xml
  • 如何在 JPA 中捕获 OptimisticLockException

    我在这里读了几个关于OptimisticLockException与 JPA 一起使用 用于无状态会话 bean 它被抛出 但显然不是我期望的地方 这是我期望得到异常的代码 try productFacade edit product ca
  • 将 UIWebView 完整内容导出到 NSData? iPhone

    我想做的是得到UIWebView完整内容 文本 图像和 CSS 包含在一个小包中 我估计NSData将是最好的方法 或者还有其他更压缩的版本吗 可能已经晚了 无法对此作出回应 但我发现您可以从使用 NSCachedURLResponse 发
  • 使用鼠标右键单击时会选择 Datagrid WPF 上的禁用行

    我在 Datagrid WPF 中遇到一些问题 我有一个数据网格 每当用户为数据网格 itemSource 的绑定项分配值时 我想将单行的 IsEnabled 属性设置为 false 所以我通过 datagrid 样式触发器做到了
  • EF Include 始终为第一个导航属性生成 INNER JOIN

    我正在使用代码优先方法并具有以下模型 public class Person public int ID get set public string Name get set public int CurrentStationID get
  • 在 JTextArea 中剪切和粘贴

    我正在开发一个应用程序 它要求 JTextArea 中只有 165 个字符 我已经强加了这个条件 我使用静态计数器来计算在文本区域中输入的字符数 并进行编码以处理用户从文本中删除任何字符串时的情况 计数器必须通过考虑所选字符串的长度来增加
  • zsh:找不到命令:导入[重复]

    这个问题在这里已经有答案了 我正在使用 MAC OS Catalina 版本 10 15 1 并且正在开发一个 python 项目 每次我在命令行版本 2 10 433 上使用命令 import OS 时 都会收到以下消息 zsh 找不到命
  • 需要在命令提示符中导航到文件夹[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的命令提示符在 C Users 名称 中启动 我需要将其放在不同的文件夹中 如何使用命令提示符本身来执行此操作 导航到 Windows
  • Boost dijkstra Shortest_path - 如何获得最短路径而不仅仅是距离?

    我需要使用 Boost 库来获得从一点到另一点的最短路径 我已经查看了示例代码 它非常容易理解 然而 该示例仅展示了如何获取总距离 我正在尝试找出如何迭代前趋映射以实际get最短路径 我似乎无法弄清楚 我读过有关该主题的两个问题 boost
  • matplotlib 与事件处理程序的多个连接?

    import sys import matplotlib import matplotlib pyplot as plt print matplotlib version matplotlib get backend def hit eve
  • 无法设置Emacs Speedbar缓冲区显示模式

    我经常在 emacs 上使用不同的活动缓冲区 例如 源文件 SQL缓冲区 外壳缓冲区 我尝试让 speedbar 始终显示缓冲模式 但我找不到任何可以在 emacs 启动时加载此显示的选项 默认为文件模式 并在所有会话期间保留它 我还尝试了
  • 无法发布环聊应用(扩展程序)

    我已经创建了一个 Google Hangout 扩展应用程序 并私下测试了它的工作原理等 现在我正在尝试发布它 我已按照此处的说明进行操作 https developers google com hangouts publishing ht
  • 应用程序上下文bean

    我正在尝试从应用程序上下文中提取 bean 所以我定义了类 public class ApplicationContextProvider implements ApplicationContextAware private static
  • 在没有 MVC 的纯 ASP.NET Web API 服务中,我们是否还需要 Global.asax 中的 AreaRegistration.RegisterAllAreas()

    我正在尝试创建一个干净的 ASP NET Web API 服务 如果可能的话 不引用 MVC 程序集 我关注了这个博客http www codeproject com Articles 615805 Creating a Clean Min
  • xlocale 在 OS X 上损坏?

    我有一个简单的程序 它使用命令行上传递给它的一系列语言环境来测试 wchar t 和 char 之间的转换 它通过打印区域设置名称和转换失败的字符串来输出失败的转换列表 我正在使用 clang 和 libc 构建它 我的理解是 libc 的
  • 如果另一个可观察量在 RxJS 中有数据,如何忽略一个可观察量中的所有数据?

    我有两个可观察量 一个从浏览器接收数据本地存储另一个来自database通过WebAPI 我想订阅它们 所以如果从本地存储有数据 不启动从database 如果从观察到本地存储没有任何 数据 调用ajax调用以获取数据WebAPI 在下面的
  • MSBuild 脚本中覆盖的 AfterBuild 目标未执行

    我有一个非常简单的 MSBuild 脚本 它构建了一堆 sln 文件
  • ILookup 与 IGrouping

    我一直很难阐明之间的差异ILookup