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的更多相关文章

  1. DictionaryHelper

    /// <summary> /// DictionaryHelper /// </summary> public static class DictionaryHelper { ...

  2. cocoStudio UI编辑器 学习总结

    一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...

  3. cocos2d_x 问题汇总

    1.生成so文件时,报“No rule to make target ”错误 解决方法:将.\xxx[appname]\proj.android\obj\local\armeabi\objs中的文件全 ...

  4. cocostudio内存释放

    在使用cocostudio时,在释放内存时能够这样做: 在onExit()方法里加入例如以下: void LoadLayer::onExit() { // 释放本对象自己 removeFromPare ...

  5. C#文件夹权限操作工具类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  6. jaron插件的用法

    一.dict字典插件的基本用法: <%@ taglib prefix="dict" uri="http://www.evan.jaron.com/tags/dict ...

  7. DictionaryHelper2

    /// <summary> /// DictionaryHelper /// </summary> public static class DictionaryHelper { ...

  8. C#工具类之字典扩展类

    using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...

  9. 3个N加上各种运算符号结果等于6(纯属娱乐)C#

    网上的题目: 题有点难  但都有解 2    2    2  =  6 3    3    3  =  6 4    4    4  =  6 5    5    5  =  6 6    6     ...

随机推荐

  1. 单个控件textbox只支持在英文状态下输入所需的字符串

    也就是它的属性: Imemode的属性 设置成off就可以了 ,就不会受到所输入的中文汉字了.

  2. MongoDB整理笔记のReplica Sets

    MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台机器是用于写操作,正因为如此,MongoDB提供了数据一致性的保障.而担当primary角色的机器,可以把读的 ...

  3. 很棒的git和python学习网站

    很棒的git和python学习网站:http://www.liaoxuefeng.com/ 博主名叫廖雪峰

  4. react-native-echarts构建的图表出现滚动条并且可以滑动的问题

    前段时间做echarts饼状图,按照官方提供的写法完成以后图表可以出来,但是虚拟机上演示出现了滚动条,并且拖动时就会出现空白,双击会缩小像这样       参考GitHub上给出的方法修改成功: no ...

  5. 生成MySql数据库的数据字典代码参考

    Code: /** * 生成mysql数据字典 */ //配置数据库 $dbserver = "127.0.0.1"; $dbusername = "root" ...

  6. UIImageView 动画

    1.UIImageView 动画 1.1 播放图片集 @property (nonatomic, strong) UIImageView *playImageView; self.playImageV ...

  7. 2018数学建模国赛总结(A题/编程选手视角)

    2018数学建模已经告一段落了,先说说基本情况吧,我们队伍专业分别为:金融(A),会计(B),计算机(我),配置还算可以,他们俩会数据分析软件也会写论文,我可以写代码,画图.他们俩打过美赛(M奖),我 ...

  8. [SinGuLaRiTy] 2017 百度之星程序设计大赛 初赛B

    [SinGuLaRiTy-1037] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. Chess Time Limit: 2000/1000 ...

  9. Android手机中怎么样在没root的情况下 修改 hosts 文件

    工具  链接:https://pan.baidu.com/s/1AENluDCQ-2qYDPcE5K6l8g 密码:t7eu  http://bbs.360.cn/forum.php?mod=view ...

  10. python-列表增删改查、排序、两个list合并、多维数组等

    一.list列表 数组 列表类型:list 下标从0开始,0,1,2... 二.列表增加元素 stus.append() 在列表末尾增加一个元素: stus.insert(,)  在指定位置添加一个元 ...