using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace G2.Utils
{
/// <summary>
/// 字典帮助类
/// </summary>
public static class DictionaryHelper
{
/// <summary>
/// 字典排序(默认排序)
/// </summary>
/// <typeparam name="TKey">Key类型</typeparam>
/// <typeparam name="TValue">Value类型</typeparam>
/// <param name="dictionary">无序字典</param>
/// <returns>有序字典</returns>
public static IDictionary<TKey, TValue> Sort<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
{
if (dictionary == null)
{
throw new ArgumentNullException("字典为空,不能排序");
} return new SortedDictionary<TKey, TValue>(dictionary);
} /// <summary>
/// 字典排序(自定义排序)
/// </summary>
/// <typeparam name="TKey">Key类型</typeparam>
/// <typeparam name="TValue">Value类型</typeparam>
/// <param name="dictionary">无序字典</param>
/// <param name="comparer">自定义排序方法</param>
/// <returns>有序字典</returns>
public static IDictionary<TKey, TValue> Sort<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IComparer<TKey> comparer)
{
if (dictionary == null)
{
throw new ArgumentNullException("字典为空,不能排序");
} if (comparer == null)
{
throw new ArgumentNullException("自定义排序方法为空,不能排序");
} return new SortedDictionary<TKey, TValue>(dictionary, comparer);
} /// <summary>
/// 字典排序(依据值默认排序)
/// </summary>
/// <typeparam name="TKey">Key类型</typeparam>
/// <typeparam name="TValue">Value类型</typeparam>
/// <param name="dictionary">无序字典</param>
/// <returns>有序字典</returns>
public static IDictionary<TKey, TValue> SortByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
{
return dictionary.OrderBy(v => v.Value).ToDictionary(item => item.Key, item => item.Value);
} /// <summary>
/// 字典排序(依据值自定义排序)
/// </summary>
/// <typeparam name="TKey">Key类型</typeparam>
/// <typeparam name="TValue">Value类型</typeparam>
/// <param name="dictionary">无序字典</param>
/// <param name="comparer">自定义排序方法</param>
/// <returns>有序字典</returns>
public static IDictionary<TKey, TValue> SortByValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, IComparer<TValue> comparer)
{
return dictionary.OrderBy(v => v.Value, comparer).ToDictionary(item => item.Key, item => item.Value);
} /// <summary>
/// 判断字典是否为空或者无数据
/// </summary>
/// <param name="dictionary">字典</param>
/// <returns>True:字典为空或没有数据;否则为False</returns>
public static bool IsEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
{
if (dictionary == null)
{
throw new ArgumentNullException("字典为空");
} return dictionary.Count == ;
} /// <summary>
/// 判断字典是否为空或者无数据
/// </summary>
/// <param name="dictionary">字典</param>
/// <returns>True:字典为空或没有数据;否则为False</returns>
public static bool IsNullOrEmpty<TKey, TValue>(this IDictionary<TKey, TValue> dictionary)
{
return dictionary == null || dictionary.Count == ;
} /// <summary>
/// 获取字典值(如果不包含该值则由自定义方法返回)
/// </summary>
/// <typeparam name="TKey">Key类型</typeparam>
/// <typeparam name="TValue">Value类型</typeparam>
/// <param name="dictionary">字典</param>
/// <param name="key">Key值</param>
/// <param name="function">自定义方法</param>
/// <returns>字典里的值或者自定义方法返回值</returns>
public static TValue GetOrGetByFunction<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, Func<TValue> function)
{
if (dictionary == null)
{
throw new ArgumentNullException("字典为空");
} if (dictionary.ContainsKey(key))
{
return dictionary[key];
} if (function == null)
{
throw new ArgumentNullException("自定义取值方法为空,不能获取值");
} return function();
} /// <summary>
/// 新增或重写(如果没有该Key值,则新增;否则重写该值)
/// </summary>
/// <typeparam name="TKey">Key类型</typeparam>
/// <typeparam name="TValue">Value类型</typeparam>
/// <param name="dictionary">字典</param>
/// <param name="key">Key值</param>
/// <param name="value">Value新值</param>
/// <returns>字典</returns>
public static IDictionary<TKey, TValue> AddOrSet<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
if (dictionary == null)
{
throw new ArgumentNullException("字典为空");
} if (dictionary.ContainsKey(key))
{
dictionary[key] = value;
}
else
{
dictionary.Add(new KeyValuePair<TKey, TValue>(key, value));
} return dictionary;
}
}
}

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. net.sf.fjep.fatjar_0.0.32 eclipse4.x 可以用的jar包

    http://pan.baidu.com/s/1nvlIw21?errno=0&errmsg=Auth%20Login%20Sucess&stoken=bb98db9f451c00ae ...

  2. tomcat是一个应用服务器

    总的来说,tomcat的身份可以看作一个WEB容器,但实际上是一个应用程序服务器.为什么这么说?1.因为你从tomcat内部看你会发现其实tomcat内置了一个轻量级的WEB服务器,用于转发html文 ...

  3. python笔记--4--面向对象

    面向对象 Python中对象的概念很广泛,Python中的一切内容都可以称为对象,除了数字.字符串.列表.元组.字典.集合.range对象.zip对象等等,函数也是对象,类也是对象. 在Python中 ...

  4. 【总结整理】display与position之间的关系【较完整】(转)

    display与position之间的关系   以防自己忘记写的 网上找的 positon 与 display 的相互关系 元素分为内联元素和区块元素两类(当然也有其它的),在内联元素中有个非常重要的 ...

  5. koa的教程

    https://github.com/bmcmahen/koa-mongo-sessionhttp://www.fkwebs.com/2333.htmlhttps://segmentfault.com ...

  6. PythonNote02_HTML标签

    <!DOCTYPE> <html> <head> <meta charset = "utf-8" /> <meta name= ...

  7. 用fontcreator创建了一个半成品的字体

    下效果,哈哈. 为啥说半成品呢?因为只制作了0到9这几个字符,其他的字母.汉字.符号啥的都没有制作,唯一感觉就是字体设计是一个非常有设计感的活儿,而且需要付出很多的精力,尤其是汉字字体,常见的有6k多 ...

  8. SRA数据转成fastq

    Downloading and installing the SRA Toolkit step1: 下载并安装SRAtoolkit    (Download the Toolkit from the ...

  9. 创建Mat对象

    Mat 是一个非常优秀的图像类,它同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵.有多种方法创建一个 Mat 对象. 1.构造函数方法 下面是一个使用构造函数创建对象的例子. 常用的构造函数 2 ...

  10. delete请求,删除不成功?

    因为,在数据库底层,其实并没有删除该数据,只是将数据的标识设置为is_deleted.因此,最后即使删除了,查询的时候还是会显示在界面. 故,需要重写get请求.