C# DictionaryHelper
1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Core.Common
{
/// <summary>
/// DictionaryHelper
/// </summary>
public static class DictionaryHelper
{
/// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">Put之前字典</param>
/// <param name="key">Key</param>
/// <param name="value">Value</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> Put<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
return dictionary.Put(key, value, (v) => true);
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="targetDictionary">Put之前字典</param>
/// <param name="sourceDictionary">Key-Value</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> PutArray<TKey, TValue>(this Dictionary<TKey, TValue> targetDictionary, Dictionary<TKey, TValue> sourceDictionary)
{
return targetDictionary.PutArray(sourceDictionary, (v) => true);
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">Put之前字典</param>
/// <param name="key">Key</param>
/// <param name="value">Value</param>
/// <param name="ignoreExists">是否忽视已存在项(不更改已存在项)</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> Put<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue value, bool ignoreExists)
{
return dictionary.Put(key, value, (v) => !ignoreExists);
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">Put之前字典</param>
/// <param name="key">Key</param>
/// <param name="value">Value</param>
/// <param name="replaceExistsValueCondition">替换已存在项的条件函数</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> Put<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue value, Func<TValue, bool> replaceExistsValueCondition)
{
if (dictionary != null)
{
if (dictionary.ContainsKey(key) && replaceExistsValueCondition(value))
{
dictionary[key] = value;
}
else
{
dictionary.Add(key, value);
}
} return dictionary;
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="targetDictionary">Put之前字典</param>
/// <param name="sourceDictionary">Key-Value</param>
/// <param name="ignoreExists">是否忽视已存在项(不更改已存在项)</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> PutArray<TKey, TValue>(this Dictionary<TKey, TValue> targetDictionary, Dictionary<TKey, TValue> sourceDictionary, bool ignoreExists)
{
return targetDictionary.PutArray(sourceDictionary, (v) => !ignoreExists);
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="targetDictionary">Put之前字典</param>
/// <param name="sourceDictionary">Key-Value</param>
/// <param name="replaceExistsValueCondition">替换已存在项的条件函数</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> PutArray<TKey, TValue>(this Dictionary<TKey, TValue> targetDictionary, Dictionary<TKey, TValue> sourceDictionary, Func<TValue, bool> replaceExistsValueCondition)
{
if (sourceDictionary == null)
{
return targetDictionary;
} foreach (var keyValuePair in sourceDictionary)
{
targetDictionary.Put(keyValuePair.Key, keyValuePair.Value, replaceExistsValueCondition);
} return targetDictionary;
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">Put之前字典</param>
/// <param name="keyValuePair">Key-Value</param>
/// <returns>Put之后字典</returns>
public static Dictionary<TKey, TValue> Put<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, KeyValuePair<TKey, TValue> keyValuePair)
{
return dictionary.Put(keyValuePair.Key, keyValuePair.Value);
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">字典</param>
/// <param name="key">Key</param>
/// <returns>Value</returns>
public static TValue GetObjectWithoutException<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key) where TValue : class
{
if (dictionary != null && dictionary.ContainsKey(key))
{
return dictionary[key];
} return null;
} /// <summary>
/// 删除 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">字典</param>
/// <param name="key">Key</param>
/// <returns>Value</returns>
public static void RemoveObjectWithoutException<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key) where TValue : class
{
if (dictionary != null && dictionary.ContainsKey(key))
{
dictionary.Remove(key);
}
} /// <summary>
/// 获取之后删除(类似队列的Pop) 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">字典</param>
/// <param name="key">Key</param>
/// <returns>Value</returns>
public static TValue PopWithoutException<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key) where TValue : class
{
if (dictionary != null && dictionary.ContainsKey(key))
{
TValue item = dictionary[key];
dictionary.Remove(key);
return item;
} return null;
} /// <summary>
/// Put 扩展字典方法 存在时更改,不存在时添加
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dictionary">字典</param>
/// <param name="key">Key</param>
/// <returns>Value</returns>
public static TValue GetStructWithoutException<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key) where TValue : struct
{
if (dictionary != null && dictionary.ContainsKey(key))
{
return dictionary[key];
} return default(TValue);
} /// <summary>
/// 列表转换成字典(重复数据自动忽略)
/// </summary>
/// <typeparam name="TModel">Model的类型</typeparam>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="list">列表</param>
/// <param name="keySelector">用于从每个元素中提取键的函数</param>
/// <param name="elementSelector">用于从每个元素产生结果元素值的转换函数</param>
/// <returns>Value</returns>
public static Dictionary<TKey, TValue> ToDictionaryWithoutException<TModel, TKey, TValue>(this IEnumerable<TModel> list, Func<TModel, TKey> keySelector, Func<TModel, TValue> elementSelector)
{
var dict = new Dictionary<TKey, TValue>();
if (list != null)
{
foreach (var model in list)
{
var key = keySelector(model);
var value = elementSelector(model);
dict.Put(key, value);
}
} return dict;
}
}
}
/// <summary>
/// 字典的字符串值
/// </summary>
/// <typeparam name="TKey">Key的类型</typeparam>
/// <typeparam name="TValue">Value的类型</typeparam>
/// <param name="dict">源列表</param>
/// <returns>字符串值</returns>
public static string ToStandardString<TKey, TValue>(this IDictionary<TKey, TValue> dict)
{
if (dict == null)
{
return "null";
} var enumerator = dict.GetEnumerator();
if (!enumerator.MoveNext())
{
return "{}";
} var sb = new StringBuilder();
sb.Append("{");
do
{
TKey key = enumerator.Current.Key;
TValue value = enumerator.Current.Value; sb.AppendFormat("\"{0}\":\"{1}\"", object.ReferenceEquals(key, dict) ? "(this Map)" : key.ToString(), object.ReferenceEquals(value, dict) ? "(this Map)" : enumerator.Current.Value.ToString());
if (enumerator.MoveNext())
{
sb.Append(",");
}
else
{
break;
}
} while (true); sb.Append("}"); return sb.ToString();
}
C# DictionaryHelper的更多相关文章
- DictionaryHelper
/// <summary> /// DictionaryHelper /// </summary> public static class DictionaryHelper { ...
- cocoStudio UI编辑器 学习总结
一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...
- cocos2d_x 问题汇总
1.生成so文件时,报“No rule to make target ”错误 解决方法:将.\xxx[appname]\proj.android\obj\local\armeabi\objs中的文件全 ...
- cocostudio内存释放
在使用cocostudio时,在释放内存时能够这样做: 在onExit()方法里加入例如以下: void LoadLayer::onExit() { // 释放本对象自己 removeFromPare ...
- C#文件夹权限操作工具类
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...
- jaron插件的用法
一.dict字典插件的基本用法: <%@ taglib prefix="dict" uri="http://www.evan.jaron.com/tags/dict ...
- DictionaryHelper2
/// <summary> /// DictionaryHelper /// </summary> public static class DictionaryHelper { ...
- C#工具类之字典扩展类
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- 3个N加上各种运算符号结果等于6(纯属娱乐)C#
网上的题目: 题有点难 但都有解 2 2 2 = 6 3 3 3 = 6 4 4 4 = 6 5 5 5 = 6 6 6 ...
随机推荐
- ROS源码解读(二)--全局路径规划
博客转载自:https://blog.csdn.net/xmy306538517/article/details/79032324 ROS中,机器人全局路径规划默认使用的是navfn包 ,move_b ...
- 通过javascript的日期对象来得到当前的日期
var currentDate = new Date(); var weekday = ["星期日", "星期一", "星期二", &quo ...
- Spring源码研究:数据绑定
在做Spring MVC时,我们只需用@Controllor来标记Controllor的bean,再用@RequestMapping("标记")来标记需要接受请求的方法,方法中第一 ...
- xampp本地服务器+HBuilder配置php环境
HBuilder配置PHP环境: 下载,运行HBuilder编辑器 打开右侧小窗口,点击设置图标—>设置web服务器—>外置web服务器 输入你想要浏 ...
- android IntentService和ResultReceiver的异步处理
IntentService和ResultReceiver的异步处理 1.在下载手机上从网络下载东西的时候会用到AsyncTask来方便处理,这里可以在用IntentService和ResultRece ...
- MariaDB 一些SQL语句的执行
通过拼接的TAG_NAME字符串获取对应的TAG_ID字符串 形如: '丹药|练功流|轻松|学生|学院风' 查询结果:'10|35|36|40' SELECT GROUP_CONCAT(TAG_ID ...
- 关于bootstrap模态框的初始化事件
转:https://blog.csdn.net/u010181136/article/details/77579823
- 如何在ubuntu下使用samba创建共享
快速简单的创建共享,比网上那些乱七八糟过时的文档强太多 原文地址: https://help.ubuntu.com/community/How%20to%20Create%20a%20Network% ...
- SpringMVC异常的使用
1.创建一个异常类,需要extend RuntimeException,继承父类中所有的方法 2.局部异常,仅能处理这个Controller中的异常 在Controller中添加异常处理方法 @Exc ...
- 数组常用的API——splice()截取
他的几个作用:截取 删除 增加 替换. 当传递一个参数的时候 : 截取开始的位置,参数代表下标,默人会截取到结束的位置. 当传递两个参数的时候: 第一个参数是删除的下标: 第二个参数代表删除几个 ...