咨询区

  • dan-gph

MSND 上对 Lookup 做了如下的解释。

Lookup<TKey, TElement> 类似于 Dictionary<TKey,TValue>, 不同点在于 Dictionary<TKey, TValue> 中的key对应的是单个value,而 Lookup<TKey, TElement> 中的 key 对应的是一个 value集合

我觉得这个解释等于没解释,请问 Lookup 的用途在哪里?

回答区

  • bobbymcr

你可以把 Lookup<TKey, TElement>Dictionary<TKey, Collection<TElement>> 看作是等价的,很明显后者通过 key 可以返回与之匹配的 list 集合。


namespace LookupSample
{using System;using System.Collections.Generic;using System.Linq;class Program{static void Main(string[] args){List<string> names = new List<string>();names.Add("Smith");names.Add("Stevenson");names.Add("Jones");ILookup<char, string> namesByInitial = names.ToLookup((n) => n[0]);// count the namesConsole.WriteLine("J's: {0}", namesByInitial['J'].Count()); // 1Console.WriteLine("S's: {0}", namesByInitial['S'].Count()); // 2Console.WriteLine("Z's: {0}", namesByInitial['Z'].Count()); // 0, does not throw}}
}

点评区

相信很多人对 Lookup 不是很理解,我初学时也没搞特别清楚,真不知道 Lookup 是出自哪里的术语,不过没关系,没听过 Lookup,总听过 GroupBy 吧,对,就是关系型数据库中用到的 group by,这两者是等价的,只不过又造了一个新名词而已,不信的话,我写个例子给你看看。

static void Main(string[] args){var nums = new int[] { 1, 2, 3, 3 };//使用 lookupILookup<int, int> query = nums.ToLookup(t => t);foreach (IGrouping<int, int> item in query){var key = item.Key;var list = item.ToList();Console.WriteLine($"lookup : key={key}, value={string.Join(",", list)}");}Console.WriteLine($"\r\n  -------------- \r\n");//使用 groupIEnumerable<IGrouping<int, int>> query2 = nums.GroupBy(t => t);foreach (IGrouping<int, int> item in query2){var key = item.Key;var list = item.ToList();Console.WriteLine($"groupby : key={key}, value={string.Join(",", list)}");}Console.ReadLine();}

从结果看,两者都做了相同的事情,仔细观察代码,你会发现在 foreach 的迭代项 item 都是 IGrouping<int, int> 类型,接下来就有一个疑问了,query 还能被 foreach 吗?这个要看 ILookup<int, int> 的内部迭代类是怎么写的了,翻一下代码看看。


public class Lookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, IEnumerable, ILookup<TKey, TElement>
{public IEnumerator<IGrouping<TKey, TElement>> GetEnumerator(){Grouping g = lastGrouping;if (g != null){do{g = g.next;yield return g;}while (g != lastGrouping);}}
}

看到没有,迭代类返回的类型 IEnumerator<IGrouping<TKey, TElement>> 不正是做 GroupBy 的 query2 类型 IEnumerable<IGrouping<int, int>> 嘛 ~~~

如果你要不懂 sql 的 group by, 那就当我没说哈 ????????????

原文链接:https://stackoverflow.com/questions/1403493/what-is-the-point-of-lookuptkey-telement

NET问答: 说说你对 LookupTKey, TElement 的看法 ?相关推荐

  1. edit怎么读英语_名师说学习:英语学习有方法

    如何学好英语,是困扰每一个英语学习者的问题.从多年英语教师的角度,巨人英语的老师和大家分享自己的看法. 汪维老师 /Profile/ 巨人学校金牌教师 从事英语教育工作16年 精通新概念.剑桥.中高考 ...

  2. linux运维高薪就业指导(新手获得高薪必备)

    老男孩linux运维高薪就业指导 超细精讲 15年专家经验,新手获得高新必备课程 http://edu.51cto.com/course/course_id-3708.html 本课程2015年5月2 ...

  3. 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析

    分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析 Hierarchical Conditional Relation Networks for Video Question ...

  4. 服务器温度3d显示,智能问答助手、3D可视化展示,腾讯医典“黑科技”助力科普更有温度...

    创新科技与医学科普的融合,将带来什么样的变化? 5 月21- 23 日,腾讯全球数字生态大会在云南昆明举办.在智慧医疗专场,腾讯医典正式发布其在医学科普领域的两大前沿探索:智能问答助手,借助系统化医学 ...

  5. python 工业自动化 人工智能_Python人工智能之路 - 第三篇 : PyAudio 实现录音 自动化交互实现问答...

    Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...

  6. 【ios开发/Xcode】实现简易省会问答

    [ios开发/Xcode]实现省会问答 实现效果 源代码 实现效果 图1为初始界面,点击[显示答案]结果如图2所示显示答案为"福州",点击[下一个]如图3所示显示下一个省份,同样也 ...

  7. iOS基础问答面试题连载-附答案

    2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...

  8. SoapUi测试,测试相关问答知识

    2019独角兽企业重金招聘Python工程师标准>>> SoapUi测试 http://www.csdn123.com/html/topnews201408/39/14939.htm ...

  9. 链客区块链技术问答社区

    链客是中国领先的区块链垂直领域技术问答社区(www.liankexing.com),旨在为大家提供一个直接.高效的技术交流平台,区块链技术爱好者遇到的每一个问题,链客做到有问必答! 在这里: ①海量的 ...

最新文章

  1. Metrics.NET 项目
  2. 链表python笔试题目_python经典面试算法题1.4:如何对链表进行重新排序
  3. RocketMQ的Consumer详解之push和pull模式(长轮询)
  4. php类库下载下来怎么使用,PHP如何实现$this-[类库名称]-[类库方法]。
  5. android 生命周期流程图,Android Studio ——Service的生命周期
  6. 基于visual Studio2013解决面试题之1201链表去重
  7. 网络钓鱼和欺诈相关专题
  8. D3DXVec3TransformCoord 函数
  9. Swift 5.0的新特性
  10. 不同参数对分类模型性能影响记录
  11. SQL员工基本工资表题目及答案
  12. 智源AI日报(2022-09-02):我是如何从头开始写一篇顶级论文的
  13. 微信小程中文特殊字符编码与解码
  14. mysql 计算近30天总金额_电商网站销售数据分析(MYSQL)
  15. 制作淘宝详情页时要注意哪些细节?
  16. 前端角度出发做好SEO需要考虑什么?
  17. [Android]安卓上传下载文件
  18. 苹果原壁纸高清_30张美女手机高清壁纸苹果手机安卓手机通用
  19. ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found (required
  20. Unity教程之-制作闪亮的星星Star(二):创建Shader

热门文章

  1. aop实现原理_从宏观的实现原理和设计本质入手,带你理解 AOP 框架的原理
  2. 比特币base58源码解析_中本聪源码早期版本流出:区块链原名时间链,比特币内置虚拟扑克游戏...
  3. WPF 绘制对齐像素的清晰显示的线条
  4. Java的接口、继承与多态
  5. hadoop:could only be replicated to 0 nodes, instead of 1
  6. matlab练习程序(PCASVD)
  7. jquery如何获取元素的滚动高度
  8. 12种方法返回2个文件路径之间的公共基路径ExtractBasePath
  9. 用c语言复制字符串的元音字母,急求:编写程序,将一个字符串中的元音字母复制到另一个字符串,然后输出。...
  10. linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤