NET问答: 说说你对 LookupTKey, TElement 的看法 ?
咨询区
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 的看法 ?相关推荐
- edit怎么读英语_名师说学习:英语学习有方法
如何学好英语,是困扰每一个英语学习者的问题.从多年英语教师的角度,巨人英语的老师和大家分享自己的看法. 汪维老师 /Profile/ 巨人学校金牌教师 从事英语教育工作16年 精通新概念.剑桥.中高考 ...
- linux运维高薪就业指导(新手获得高薪必备)
老男孩linux运维高薪就业指导 超细精讲 15年专家经验,新手获得高新必备课程 http://edu.51cto.com/course/course_id-3708.html 本课程2015年5月2 ...
- 分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析
分层条件关系网络在视频问答VideoQA中的应用:CVPR2020论文解析 Hierarchical Conditional Relation Networks for Video Question ...
- 服务器温度3d显示,智能问答助手、3D可视化展示,腾讯医典“黑科技”助力科普更有温度...
创新科技与医学科普的融合,将带来什么样的变化? 5 月21- 23 日,腾讯全球数字生态大会在云南昆明举办.在智慧医疗专场,腾讯医典正式发布其在医学科普领域的两大前沿探索:智能问答助手,借助系统化医学 ...
- python 工业自动化 人工智能_Python人工智能之路 - 第三篇 : PyAudio 实现录音 自动化交互实现问答...
Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...
- 【ios开发/Xcode】实现简易省会问答
[ios开发/Xcode]实现省会问答 实现效果 源代码 实现效果 图1为初始界面,点击[显示答案]结果如图2所示显示答案为"福州",点击[下一个]如图3所示显示下一个省份,同样也 ...
- iOS基础问答面试题连载-附答案
2017-02-02 timhbw CocoaChina 以下是一些自己收集的比较基础的问题(大神可以忽略),附上答案,方便大家阅读.俗话说得好,基础不牢,地动山摇.文章末尾会提供PDF版的文档,方便 ...
- SoapUi测试,测试相关问答知识
2019独角兽企业重金招聘Python工程师标准>>> SoapUi测试 http://www.csdn123.com/html/topnews201408/39/14939.htm ...
- 链客区块链技术问答社区
链客是中国领先的区块链垂直领域技术问答社区(www.liankexing.com),旨在为大家提供一个直接.高效的技术交流平台,区块链技术爱好者遇到的每一个问题,链客做到有问必答! 在这里: ①海量的 ...
最新文章
- Metrics.NET 项目
- 链表python笔试题目_python经典面试算法题1.4:如何对链表进行重新排序
- RocketMQ的Consumer详解之push和pull模式(长轮询)
- php类库下载下来怎么使用,PHP如何实现$this-[类库名称]-[类库方法]。
- android 生命周期流程图,Android Studio ——Service的生命周期
- 基于visual Studio2013解决面试题之1201链表去重
- 网络钓鱼和欺诈相关专题
- D3DXVec3TransformCoord 函数
- Swift 5.0的新特性
- 不同参数对分类模型性能影响记录
- SQL员工基本工资表题目及答案
- 智源AI日报(2022-09-02):我是如何从头开始写一篇顶级论文的
- 微信小程中文特殊字符编码与解码
- mysql 计算近30天总金额_电商网站销售数据分析(MYSQL)
- 制作淘宝详情页时要注意哪些细节?
- 前端角度出发做好SEO需要考虑什么?
- [Android]安卓上传下载文件
- 苹果原壁纸高清_30张美女手机高清壁纸苹果手机安卓手机通用
- ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found (required
- Unity教程之-制作闪亮的星星Star(二):创建Shader
热门文章
- aop实现原理_从宏观的实现原理和设计本质入手,带你理解 AOP 框架的原理
- 比特币base58源码解析_中本聪源码早期版本流出:区块链原名时间链,比特币内置虚拟扑克游戏...
- WPF 绘制对齐像素的清晰显示的线条
- Java的接口、继承与多态
- hadoop:could only be replicated to 0 nodes, instead of 1
- matlab练习程序(PCASVD)
- jquery如何获取元素的滚动高度
- 12种方法返回2个文件路径之间的公共基路径ExtractBasePath
- 用c语言复制字符串的元音字母,急求:编写程序,将一个字符串中的元音字母复制到另一个字符串,然后输出。...
- linux 桌面显示视频播放器,Ubuntu 13.10开启媒体播放器VLC桌面通知的步骤