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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最多金的编程语言Top10:Python第3,R第10,你猜第1是谁?

导读&#xff1a;如果你还在纠结选哪门编程语言来开启你的码农生涯&#xff0c;这将是你的最佳指南。本文绝非标题党&#xff0c;而是基于大量数据和为期两周的深入探究&#xff0c;在18年初&#xff0c;对IT行业的现状、趋势以及预测进行客观观察&#xff0c;让大家对编程语言…

[转贴]制作windows 2003自动安装盘-集成补丁/Raid及硬件驱动

从事网游行业的工作人员&#xff0c;如果一款游戏上线&#xff0c;必须上大量服务器。用品牌机引导盘装系统&#xff0c;再打个补丁&#xff0c;速度真让人不敢恭维。为了提高效率&#xff0c;就尝试制作一张集成系统补丁/RAID及硬件驱动自动安windows 2003系统盘。下面以品牌机…

4月 .NET 线上 Meetup,快来报名

点击蓝字关注我们.NET 6 preview 2 在3月11日已经发布&#xff0c;.NET 6 将是 .NET Core 3.1 之后的第一个 LTS 版本&#xff0c;也是微软开启全平台统一一个 .NET 计划以来的第一个 LTS 版本&#xff0c;意义不可谓不大&#xff0c;那么 .NET 5/6 又会带来哪些新特性呢&#…

NP完全性理论与近似算法

一、图灵机根据有限状态控制器的当前状态及每个读写头读到的带符号&#xff0c;图灵机的一个计算步可实现下面3个操作之一或全部。改变有限状态控制器中的状态。清除当前读写头下的方格中原有带符号并写上新的带符号。独立地将任何一个或所有读写头&#xff0c;向左移动一个方格…

阿里25k 百度25k,招WPF!

.NET5打通7大开发方向&#xff0c;CLR超高性能&#xff0c;.NET6支持Blazor嵌入WPF&#xff0c;还有MAUI跨平台UI解决方案&#xff0c;都是.NET的利好&#xff0c;也是WPF的利好。牛年跳槽季&#xff0c;.NET在客户端方向一骑绝尘&#xff0c;阿里影视、百度地图&#xff0c;以…

掌握神经网络模型的快捷方式

TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统&#xff0c;其命名来源于本身的运行原理。Tensor&#xff08;张量&#xff09;意味着N维数组&#xff0c;Flow&#xff08;流&#xff09;意味着基于数据流图的计算&#xff0c;TensorFlow实际上就是张量从流…

.Net项目模板(Project Template)

你有没有这样的感觉&#xff0c;开启一个新项目时&#xff0c;总是做一堆体力活——项目的结构层次&#xff0c;常用日志库&#xff0c;OpenAPI库&#xff0c;ORM库&#xff0c;的引入&#xff0c;权限认证方式选择添加&#xff0c;配置文件重新归置存放等等。公共框架的部分总…

谈通过测试与失败测试

在软件测试技术中&#xff0c;现有的测试方法、测试技术中均未提及到通过测试与失败测试。 而在实际项目测试过程中&#xff0c;很多项目组却再应用该方法。虽然该方法被采用&#xff0c;但是很多人对通过测试与失败测试理解并不透侧&#xff0c;在实际使用过程中并未按统一的标…

100个微信小程序的源码公开分享

现在微信小程序越来越火&#xff0c;小编一直有意识地收集微信小程序源码&#xff0c;至今已经拥有100个小程序的源码&#xff0c;有gank、LOL战绩查询、百度小说、豆瓣电影、手势解锁等。现在&#xff0c;小编准备将这些资料免费分享给大家&#xff01;gankLOL战绩查询百度小说…

家里在一二线城市有很多套房是什么体验?答案太颠覆!

作者&#xff1a;匿名来源&#xff1a;知乎&#xff08;图片&#xff1a;网络&#xff09;“家里在一二线城市有很多套房是怎么的一种体验&#xff1f;”这是知乎上一个浏览超600万的话题。其中一个答案非常颠覆&#xff0c;获得高赞。作者的观点是否正确见仁见智&#xff0c;但…

希尔排序听起来有点难,其实很简单

前言直接插入排序当待排序数据的顺序和期望排序结果相反时&#xff0c;排序效率是最差的&#xff1b;上次聊到的折半插入排序只是减少有序列表的比较次数&#xff0c;而对于整体数据遍历次数还是没有得到优化&#xff1b;接下来要说的希尔排序就是针对整体数据进行优化&#xf…

等我敲完这行代码,就和你离婚!

工作是高端大气上档次&#xff0c;工资是低调奢华接地气&#xff01;我们叫做“程序猿”&#xff0c;也叫“攻城狮”&#xff01;但是往往城还没攻下来&#xff0c;我们的头发就先掉下来&#xff01;我们最喜欢听的一句话就是☟段子一“等我敲完这行代码&#xff0c;就和你离婚…

深夜,学妹遇到了数据分析师生涯的第一个疑问

大家好&#xff0c;我是大鹏&#xff0c;目前是一名数据分析师。自从上次学妹深夜给我发微信&#xff0c;询问数据分析师招聘要求和需要掌握的技能&#xff0c;已经过去2个月了。直到昨天&#xff0c;我再次收到了学妹的召唤&#xff1a;当天深夜 学妹深夜求助&#xff0c;定是…

你知道WPF与WinForms的区别吗?

介绍WPF的缩写指微软的Windows Presentation Foundation&#xff0c;而WinForms是Windows Forms Applications的简单组合。这两个都是微软的Windows应用程序图形用户界面&#xff0c;开发人员可以使用它们来开发Windows桌面应用程序。本文重点介绍两种开发Windows桌面应用程序的…

一起谈.NET技术,发布NGuestBook(一个基于.NET平台的分层架构留言本小系统)

发布NGuestBook的动机说明 大约在半年前&#xff0c;我在博客上发表了一个系列文章&#xff1a;《基于.NET平台的分层架构实战》。当时在讲解过程中用到了一个叫NGuestBook的案例&#xff0c;在那以后&#xff0c;有很多朋友留言或发E-mail希望能得到NGuestBook的完整源代…

当Java、C++、Python等编程语言都变成妹子。。。

试想一下&#xff0c;当Java、C、Python、Ruby、PHP、C#、JS等编程语言变成了动漫人物会是怎样的一幅场景呢&#xff1f;下面就一起看看在日本作家渡辺将人的笔下&#xff0c;各种编程语言都是哪类“美女”的吧&#xff01;Java犹如宫泽贤治的《不畏风雨》中出现的、性格木讷的…

对MySQL 进行深入学习是非常必要的

MySQL 在互联网行业非常流行&#xff0c;腾讯&#xff0c;阿里等互联网巨头都在深入使用MySQL&#xff0c; 我在腾讯时也使用MySQL&#xff0c;我在微信群里经常听到大家对MySQL 的意见也很大。在传统企业环境下使用最多的数据库产品是Oracle,SQL Server等企业级数据库&#xf…

4月 .NET 线上 Meetup,快来报名

点击蓝字关注我们.NET 6 preview 2 在3月11日已经发布&#xff0c;.NET 6 将是 .NET Core 3.1 之后的第一个 LTS 版本&#xff0c;也是微软开启全平台统一一个 .NET 计划以来的第一个 LTS 版本&#xff0c;意义不可谓不大&#xff0c;那么 .NET 5/6 又会带来哪些新特性呢&#…

机器学习资料第3版,助你继续成长!

之前分享的两份机器学习资料得到很多人的支持&#xff0c;因此小编决定再分享一份机器学习的资料。前两份资料传送门&#xff1a;【资源】机器学习资料包来袭机器学习资料升级版来了&#xff01;&#xff01;&#xff01;现在&#xff0c;再来看看有什么新资料吧。How to Build…

人工智能、机器学习、深度学习,到底他们哥仨是什么关系?

有三个词&#xff0c;这两年出现的频率越来越高&#xff1a;人工智能&#xff08;AI&#xff09;&#xff0c;机器学习&#xff08;ML&#xff09;&#xff0c;深度学习&#xff08;DL&#xff09;&#xff0c;到底他们哥仨是什么关系&#xff1f;今天小编化繁为简&#xff0c;…