1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace G2.Utils
  9. {
  10. /// <summary>
  11. /// 字典帮助类
  12. /// </summary>
  13. public static class DictionaryHelper
  14. {
  15. /// <summary>
  16. /// 字典排序(默认排序)
  17. /// </summary>
  18. /// <typeparam name="TKey">Key类型</typeparam>
  19. /// <typeparam name="TValue">Value类型</typeparam>
  20. /// <param name="dictionary">无序字典</param>
  21. /// <returns>有序字典</returns>
  22. public static IDictionary<TKey, TValue> Sort<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
  23. {
  24. if (dictionary == null)
  25. {
  26. throw new ArgumentNullException("字典为空,不能排序");
  27. }
  28.  
  29. return new SortedDictionary<TKey, TValue>(dictionary);
  30. }
  31.  
  32. /// <summary>
  33. /// 字典排序(自定义排序)
  34. /// </summary>
  35. /// <typeparam name="TKey">Key类型</typeparam>
  36. /// <typeparam name="TValue">Value类型</typeparam>
  37. /// <param name="dictionary">无序字典</param>
  38. /// <param name="comparer">自定义排序方法</param>
  39. /// <returns>有序字典</returns>
  40. public static IDictionary<TKey, TValue> Sort<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IComparer<TKey> comparer)
  41. {
  42. if (dictionary == null)
  43. {
  44. throw new ArgumentNullException("字典为空,不能排序");
  45. }
  46.  
  47. if (comparer == null)
  48. {
  49. throw new ArgumentNullException("自定义排序方法为空,不能排序");
  50. }
  51.  
  52. return new SortedDictionary<TKey, TValue>(dictionary, comparer);
  53. }
  54.  
  55. /// <summary>
  56. /// 字典排序(依据值默认排序)
  57. /// </summary>
  58. /// <typeparam name="TKey">Key类型</typeparam>
  59. /// <typeparam name="TValue">Value类型</typeparam>
  60. /// <param name="dictionary">无序字典</param>
  61. /// <returns>有序字典</returns>
  62. public static IDictionary<TKey, TValue> SortByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
  63. {
  64. return dictionary.OrderBy(v => v.Value).ToDictionary(item => item.Key, item => item.Value);
  65. }
  66.  
  67. /// <summary>
  68. /// 字典排序(依据值自定义排序)
  69. /// </summary>
  70. /// <typeparam name="TKey">Key类型</typeparam>
  71. /// <typeparam name="TValue">Value类型</typeparam>
  72. /// <param name="dictionary">无序字典</param>
  73. /// <param name="comparer">自定义排序方法</param>
  74. /// <returns>有序字典</returns>
  75. public static IDictionary<TKey, TValue> SortByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IComparer<TValue> comparer)
  76. {
  77. return dictionary.OrderBy(v => v.Value, comparer).ToDictionary(item => item.Key, item => item.Value);
  78. }
  79.  
  80. /// <summary>
  81. /// 判断字典是否为空或者无数据
  82. /// </summary>
  83. /// <param name="dictionary">字典</param>
  84. /// <returns>True:字典为空或没有数据;否则为False</returns>
  85. public static bool IsEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
  86. {
  87. if (dictionary == null)
  88. {
  89. throw new ArgumentNullException("字典为空");
  90. }
  91.  
  92. return dictionary.Count == ;
  93. }
  94.  
  95. /// <summary>
  96. /// 判断字典是否为空或者无数据
  97. /// </summary>
  98. /// <param name="dictionary">字典</param>
  99. /// <returns>True:字典为空或没有数据;否则为False</returns>
  100. public static bool IsNullOrEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
  101. {
  102. return dictionary == null || dictionary.Count == ;
  103. }
  104.  
  105. /// <summary>
  106. /// 获取字典值(如果不包含该值则由自定义方法返回)
  107. /// </summary>
  108. /// <typeparam name="TKey">Key类型</typeparam>
  109. /// <typeparam name="TValue">Value类型</typeparam>
  110. /// <param name="dictionary">字典</param>
  111. /// <param name="key">Key值</param>
  112. /// <param name="function">自定义方法</param>
  113. /// <returns>字典里的值或者自定义方法返回值</returns>
  114. public static TValue GetOrGetByFunction<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TValue> function)
  115. {
  116. if (dictionary == null)
  117. {
  118. throw new ArgumentNullException("字典为空");
  119. }
  120.  
  121. if (dictionary.ContainsKey(key))
  122. {
  123. return dictionary[key];
  124. }
  125.  
  126. if (function == null)
  127. {
  128. throw new ArgumentNullException("自定义取值方法为空,不能获取值");
  129. }
  130.  
  131. return function();
  132. }
  133.  
  134. /// <summary>
  135. /// 新增或重写(如果没有该Key值,则新增;否则重写该值)
  136. /// </summary>
  137. /// <typeparam name="TKey">Key类型</typeparam>
  138. /// <typeparam name="TValue">Value类型</typeparam>
  139. /// <param name="dictionary">字典</param>
  140. /// <param name="key">Key值</param>
  141. /// <param name="value">Value新值</param>
  142. /// <returns>字典</returns>
  143. public static IDictionary<TKey, TValue> AddOrSet<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
  144. {
  145. if (dictionary == null)
  146. {
  147. throw new ArgumentNullException("字典为空");
  148. }
  149.  
  150. if (dictionary.ContainsKey(key))
  151. {
  152. dictionary[key] = value;
  153. }
  154. else
  155. {
  156. dictionary.Add(new KeyValuePair<TKey, TValue>(key, value));
  157. }
  158.  
  159. return dictionary;
  160. }
  161. }
  162. }

C#工具类之字典扩展类的更多相关文章

  1. [Django REST framework - 视图组件之视图基类、视图扩展类、视图子类、视图集]

    [Django REST framework - 视图组件之视图基类.视图扩展类.视图子类.视图集] 视图继承关系 详图见文章末尾 视图组件可点我查看 两个视图基类:APIView.GenericAP ...

  2. UI(UGUI)框架(二)-------------UIManager单例模式与开发BasePanel面板基类/UIManage统一管理UI面板的实例化/开发字典扩展类

    UIManage单实例: /// 单例模式的核心 /// 1,定义一个静态的对象 在外界访问 在内部构造 /// 2,构造方法私有化 private static UIManager _instanc ...

  3. C#工具类之字符串扩展类

    /// <summary> /// 字典串帮忙类 /// </summary> public static class StringHelper { /// <summa ...

  4. C#工具类之素数扩展类

    /// <summary> /// 素数帮忙类 /// 本类是从.net源码 类 internal static class HashHelpers 类里抽取相应的代码 /// https ...

  5. C#工具类之XmlNode扩展类

    using System; using System.Linq; using System.Xml; /// <summary> /// XmlNodeHelper /// </su ...

  6. C#工具类之日期扩展类

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

  7. c#工具类之Int扩展类

    public static class IntHelper { /// <summary> /// 转换为2进制字符串 /// </summary> /// <param ...

  8. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  9. ios开发总结:Utils常用方法等收集,添加扩展类,工具类方法,拥有很多方便快捷功能(不断更新中。。。)

    BOBUtils 工具大全 本人github开源和收集功能地址:https://github.com/niexiaobo [对ios新手或者工作一年以内开发人员很有用处] 常用方法等收集.添加扩展类. ...

随机推荐

  1. getParameter的用法及含义

    equest.getparameter用来获取页面输入框输入的数据例如:jsp页面学员账户:<input type="text" name="username&qu ...

  2. cfree使用cygwin编译程序出现计算机丢失cygwin1.dll解决办法

    这种情况多是环境没配好,我的是64位cygwin C:\cygwin64\bin 加入到环境变量中,重打开cfree就可以解决.

  3. js中的控制结构for-in语句

    var arr=['赵','钱','孙','李']; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } var obj={ name:' ...

  4. solr笔记--solr3.2以后支持document和json两种对象来更新索引

    1.json形式(比如把mongodb数据库的导出结果json) <requestHandler name="/update" class="solr.JsonUp ...

  5. LINUX中错误 SELinux is disabled

    解决: setenforce: SELinux is disabled 那么说明selinux已经被彻底的关闭了 如果需要重新开启selinux,请按下面步骤: vi /etc/selinux/con ...

  6. JS中的!= 、== 、!==、===的用法和区别

    与c++中每一种类型都有明确的的定义不同:因JS中var定义存在,未具体区分类型,!=与==不能包含所有的条件,故加入!==与===用法: var num = 1; var str = '1'; va ...

  7. Blender 软件 四视图布局的创建方法

    Blender 软件 四视图布局的创建方法 我使用的Blender版本:Blender V 2.77 Q: 为什么要创建一个:四视图布局场景? A: 原因1:四视图布局最适合模型建模.原因2:在 Bl ...

  8. kaggle House_Price_XGBoost

    kaggle House_Price_final 代码 import numpy as np import pandas as pd from sklearn.ensemble import Rand ...

  9. thrift使用小记

        Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数 ...

  10. [译]Javascript数列的push和pop方法

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...