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. 使用Cytoscape画PPI网络图

    打开Cytoscape软件,根据菜单导入string_interactions.tsv文件 File ----> Import ----> Network from File 会弹出下图对 ...

  2. 数据预处理 center&scale&box-cox

    http://stackoverflow.com/questions/33944129/python-library-for-data-scaling-centering-and-box-cox-tr ...

  3. js 禁止后退键

    function doKey(e) { var ev = e || window.event; //获取event对象 var obj = ev.target || ev.srcElement; // ...

  4. Robot Framework - 基础关键字 BuiltIn 库(二)

    本篇教程,我们继续接着上篇内容进行讲解,我们本节教程讲解的是Robot Framework 机器人框架中的变量中使用判断.字符串的拼接.Evaluate的用法.调用Python文件.条件分支语句.以及 ...

  5. - Unknown tag (c:set).

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  6. poj3080 Blue Jeans(暴枚+kmp)

    Description The Genographic Project is a research partnership between IBM and The National Geographi ...

  7. 【转】ANDROID自定义视图——onLayout源码 流程 思路详解

    转载(http://blog.csdn.net/a396901990) 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局 ...

  8. .Net Mvc 四种过滤器

    一.授权过滤器:AuthorizationFilters 二.动作过滤:ActionFilters 三.响应过滤:ResultFilters 四.异常过滤:ExceptionFilters ===== ...

  9. CentOS 6.9下PXE+Kickstart无人值守安装操作系统

    一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持 ...

  10. dubbo服务治理中间件,zookeeper注册中心 安装配置

    对传统项目架构进行拆分: 集群概念: 面向服务分布式架构: 服务层提供被注册的对象需要实现序列化接口Serializable: 配置表现层和服务层: 依赖包: 服务层: <!-- 定义dubbo ...