为什么 Dictionary 没有 AddRange 方法?

咨询区

  • Custodio

我一直都有一个疑惑?那就是为啥 Dictionary 不提供 AddRange 方法呢?

回答区

  • Rafal Zajac

我觉得 Dictionary 之所以没有提供 AddRange 方法,主要还是考虑当遇到重复key的时候该如何处理?比如下面四种情况:

  • 忽略

A 和 B 重复,忽略 B 。

  • 覆盖

A 和 B 重复,覆盖 A。

  • 合并

A 和 B 重复,将 key 的 value 进行合并。

  • 异常

A 和 B 重复,抛异常给用户处理。

当然这也不是多难得事情,我自己就封装一个 AddRange 的扩展方法,代码如下:

namespace MyProject.Helper
{public static class CollectionHelper{public static void AddRangeOverride<TKey, TValue>(this IDictionary<TKey, TValue> dic, IDictionary<TKey, TValue> dicToAdd){dicToAdd.ForEach(x => dic[x.Key] = x.Value);}public static void AddRangeNewOnly<TKey, TValue>(this IDictionary<TKey, TValue> dic, IDictionary<TKey, TValue> dicToAdd){dicToAdd.ForEach(x => { if (!dic.ContainsKey(x.Key)) dic.Add(x.Key, x.Value); });}public static void AddRange<TKey, TValue>(this IDictionary<TKey, TValue> dic, IDictionary<TKey, TValue> dicToAdd){dicToAdd.ForEach(x => dic.Add(x.Key, x.Value));}public static bool ContainsKeys<TKey, TValue>(this IDictionary<TKey, TValue> dic, IEnumerable<TKey> keys){bool result = false;keys.ForEachOrBreak((x) => { result = dic.ContainsKey(x); return result; });return result;}public static void ForEach<T>(this IEnumerable<T> source, Action<T> action){foreach (var item in source)action(item);}public static void ForEachOrBreak<T>(this IEnumerable<T> source, Func<T, bool> func){foreach (var item in source){bool result = func(item);if (result) break;}}}
}

然后像下面这样使用。

Dictionary<string, string> mainDic = new Dictionary<string, string>() { { "Key1", "Value1" },{ "Key2", "Value2.1" },
};
Dictionary<string, string> additionalDic= new Dictionary<string, string>() { { "Key2", "Value2.2" },{ "Key3", "Value3" },
};
mainDic.AddRangeOverride(additionalDic); // Overrides all existing keys
// or
mainDic.AddRangeNewOnly(additionalDic); // Adds new keys only
// or
mainDic.AddRange(additionalDic); // Throws an error if keys already exist
// or
if (!mainDic.ContainsKeys(additionalDic.Keys)) // Checks if keys don't exist
{mainDic.AddRange(additionalDic);
}

点评区

我个人觉得 Dictionary 中应该要提供一个 AddRange 方法,然后通过枚举的方式指定下遇到重复key的情况该执行什么路径,可能现有的扩展方法太多了,没有 AddRange 也可以轻松实现。

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

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

相关文章

Android之webview与js交互

对于android初学者应该都了解webView这个组件。之前我也是对其进行了一些简单的了解&#xff0c;但是在一个项目中不得不用webview的时候&#xff0c;发现了webview的强大之处&#xff0c;今天就分享一下使用webview的一些经验。 1、首先了解一下webview。 webview介绍的原文如…

java.util.ResourceBundle使用详解

java.util.ResourceBundle使用详解一、认识国际化资源文件这个类提供软件国际化的捷径。通过此类&#xff0c;可以使您所编写的程序可以&#xff1a;轻松地本地化或翻译成不同的语言一次处理多个语言环境以后可以轻松地进行修改&#xff0c;支持更多的语言环境说的简单点&#…

12如何隐藏dock栏_iPhone边框“变色”壁纸,隐藏Dock栏

自从iOS14上线以来&#xff0c;iPhone的玩法真的是花样百出&#xff0c;今天给大家带来一组很有意思的iPhone专用壁纸&#xff0c;不仅拥有色彩边框&#xff0c;还能隐藏主屏界面底部的Dock栏。这组壁纸除了外边框自带颜色以外&#xff0c;锁屏界面的通知栏和底部两个按钮的位置…

IE开发人员工具无法使用

第一种情况&#xff1a;开发人员工具只在任务栏显示&#xff0c;桌面上看不到&#xff08;我遇到的是这种情况&#xff0c;解决方法如下&#xff09; 将鼠标放在任务栏的开发者工具&#xff0c;出现缩略图&#xff0c;也就是任务栏上方的预览图&#xff0c;可以看到开发人员工具…

微信新功能又来了,这些功能再次打开了我新世界的大门!

全世界只有3.14 % 的人关注了爆炸吧知识微信视频号&#xff0c;是一个人人都可记录和创作的内容平台&#xff0c;也是一个了解他人、了解世界的窗口。在过去一段时间里&#xff0c;视频号可能是微信迭代最多&#xff0c;变化最多&#xff0c;也受到最多关注的功能。内容创作者大…

Processing编译android的apk应用

折腾了3天&#xff0c;总算弄进去了&#xff0c;真麻烦~&#xff01; 成果如下&#xff1a; 转载于:https://www.cnblogs.com/x5115x/archive/2013/04/11/3013593.html

EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?

场景描述&#xff1a;项目中存在两个迁移 Teacher 和 TeachingPlan &#xff0c;TeachingPlan 在 Teacher 之后创建&#xff0c;并且已经执行 dotnet ef database update 将新迁移应用到数据库。此时&#xff0c;因为实体修改&#xff0c;我们希望删除 TeachingPlan 迁移然后创…

Android之DiskLruCache(缓存工具)

DiskLruCache DiskLruCache是一个十分好用的android缓存工具&#xff0c;我们可以从GitHub上下载其源码&#xff1a;https://github.com/JakeWharton/DiskLruCache DiskLruCache所有的数据都存储在/storage/emulated/0/Android/data/应用包名/cache/XXX文件夹中(你也可以修改&…

手机自动化测试:appium源码分析之bootstrap七

手机自动化测试&#xff1a;appium源码分析之bootstrap七poptest是国内唯一一家培养测试开发工程师的培训机构&#xff0c;以学员能胜任自动化测试&#xff0c;性能测试&#xff0c;测试工具开发等工作为目标。poptest测试开发工程师就业培训请大家咨询qq&#xff1a;908821478…

内核中根据inode得到文件名_聊聊DOS操作系统中的文件系统FAT12

前面我们更多的集中在Linux系统下文件系统的介绍&#xff0c;是时候介绍一下其它文件系统了。今天我们介绍一下Windows操作系统下的文件系统&#xff0c;也就是FAT文件系统。严格的来说其实是DOS的文件系统。今天我们介绍一下FAT最古老的版本&#xff0c;FAT12文件系统的内容。…

改变世界面貌的十个数学公式

全世界只有3.14 % 的人关注了爆炸吧知识1971年5月15日&#xff0c;尼加拉瓜发行了十张一套题为“改变世界面貌的十个数学公式”邮票&#xff0c;由一些著名数学家选出十个以世界发展极有影响的公式来表彰。这十个公式不但造福人类&#xff0c;而且具有典型的数学美&#xff0c;…

【2006-1】【字符统计】

Description 输入一串字符&#xff0c;将数字字符、字母字符和其它字符分别计数&#xff0c;并输出计数的结果&#xff0c;输入的字符以“?”号结束&#xff0c;“?”号不计数。输出共有3行&#xff0c;分别为输入文件中的数字字符、字母字符和其它字符的数目。 Input 字符串…

Java开源门户

最近在研究门户&#xff0c;先整理一下开源内容 GateIn&#xff1a; 新的开源门户平台&#xff0c;由RedHat JBoss和eXo平台共同打造。目标是结合强大的企业级Java基础设施和直观友好的用户界面&#xff0c;根据客户的需求&#xff0c;提供最佳的开源门户平台的企业级Java基础设…

.NET 6新特性试用 | 最小Web API

前言如果你使用过其他一些轻量级Web框架&#xff0c;比如Node.JS&#xff0c;你就会知道&#xff0c;创建具有最小依赖项的HTTP API是多么简单&#xff1a;var express require(express) var app express()app.get(/, function (req, res) {res.send(hello My IO!) })app.lis…

Android之SparseArray<E>详解

最近编程时&#xff0c;发现一个针对HashMap<Integer, E>的一个提示&#xff1a; 翻译过来就是&#xff1a;用SparseArray<E>来代替会有更好性能。那我们就来看看源码中SparseArray到底做了哪些事情&#xff1a;一、构造从构造方法我们可以看出&#xff0c;它和一般…

WPF/MVVM 快速开发

http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial 这篇文章醍醐灌顶&#xff0c;入门良药啊&#xff01; Introduction Assuming that you have a decent understanding of C#, getting started in WPF isnt too difficult. I started looking at WP…

腐蚀rust服务器命令_RUST++ MOD

RUST MOD(以下在聊天框内输入)基本命令/share playername 【shares your doors with a player(共享你的门给一个玩家)】/unshare playername 【unshares your doors with a player(解除对一个玩家的门共享)】/help 【Shows commands(显示所有指令)】/pm "playername"…

钢厂冒的白烟到底有没有污染?东北大学教授的试验结果让你大吃一惊

全世界只有3.14 % 的人关注了爆炸吧知识对于大多数人来讲钢厂的污染首先是来自于冒的气体钢铁企业污染严重的时候烟气有黄烟、黑烟、红烟、褐色烟等和这些烟相比一部分人认为钢厂冒的白烟是水蒸气没有污染另一部分则认为白烟也是污染避之而不及钢厂冒的白烟到底有没有污染呢&am…

Android之万能适配器Adapter的使用

万能适配器 万能适配器共有两个部分:SuperViewHolder 和 SuperBaseAdapter 万能的ViewHolder public class SuperViewHolder {private SparseArray<View> mViews;private View mConvertView;private int mPosition;public SuperViewHolder(Context context, ViewGro…

IE6下margin-left双倍bug问题

熟悉 CSS 盒模型朋友相信对于 IE 双倍浮动边界 BUG 不会陌生&#xff0c;这个 BUG 只会产生在浮动行的第一个浮动元素&#xff08;此处说法不准确&#xff0c;并不是第一个浮动元素&#xff0c;假如浮动的元素在一行显示不下&#xff0c;占用了多行&#xff0c;那么每一行的第一…