首页 > 其他分享 >List<Dictionary<string, string>> 去重方法

List<Dictionary<string, string>> 去重方法

时间:2023-08-23 17:57:06浏览次数:39  
标签:hash Dictionary List kv Key GetHashCode 方法

List<Dictionary<string, string>>可以使用LINQ的Distinct()方法来去重。

不过需要提供一个自定义的Comparer。实现接口IEqualityComparer

public class DictionaryComparer : IEqualityComparer<Dictionary<string, string>>
{
    public bool Equals(Dictionary<string, string> x, Dictionary<string, string> y)
    {
        return x.OrderBy(kv => kv.Key).SequenceEqual(y.OrderBy(kv => kv.Key));
    }

    public int GetHashCode(Dictionary<string, string> obj)
    {
        int hash = 0;
        foreach (var pair in obj.OrderBy(kv => kv.Key))
        {
            hash ^= pair.Key.GetHashCode();
            hash ^= pair.Value.GetHashCode();
        }
        return hash;
    }
}

使用方式:

List<Dictionary<string, string>> kvs = new List<Dictionary<string, string>>();
/*给kvs 赋值*/
....
/*distinctList为去重后的List*/
var distinctList = kvs.Distinct(new DictionaryComparer()).ToList();

 

标签:hash,Dictionary,List,kv,Key,GetHashCode,方法
From: https://www.cnblogs.com/yellow3gold/p/17652390.html

相关文章

  • uniapp 常见bug 解决方法
    Uniapp是一款基于Vue.js开发的跨平台框架,可以同时开发多个平台的应用程序,包括微信小程序、支付宝小程序、H5、APP等。然而,在开发过程中,我们可能会遇到一些常见的错误,这些错误可能会影响我们的开发进度和应用程序的质量。本篇博客将介绍一些在Uniapp开发过程中常见的错误,并提......
  • free命令详细的使用方法
    free-h在下面这些情况下,系统是正常的,不需要担心空闲内存free接近于0已使用内存used接近于total可用内存(free+buffers/cache)占total的20%以上交换分区内存 swap 没有发生改变下面情况说明内存过低,需要注意!可用内存(free+buffers/cache)过低,接近于0的时候交换分区内存占用swapuse......
  • java中创建线程的三种方法以及区别
    java中创建线程的三种方法以及区别 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用三种方式来创建线程,如下所示:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程下面让我们分别来看看这三种创建线程的......
  • 静态方法引用
    静态方法引用格式类名::静态方法成员方法对象::成员方法本类this::方法父类super::方法名引用构造方法格式类名::new 使用类名引用成员方法String::substring方法引用规则,1需要有函数接口2方法必须存在3被引用形参和抽象方法的第二个形参到最后一个形参必须保持......
  • ArrayList和Vector及LinkedList的区别
    1.ArrayList和Vector的区别第一句话:ArrayList和Vector底层都是数组实现的,初始容量都为10;在ArrayList的底层,是通过定义一个DEFAULT_CAPACITY的常量来指定的,而Vector的底层,是直接在空参构造中,通过写死了一个this(10)来指定的;第二句话:Vector大部分方法的底层实现,都加了synchronized......
  • Spring Boot通过企业邮箱发邮件被Gmail退回的问题解决方法
    这两天给我们开发的Chrome插件:Youtube中文配音增加了账户注册和登录功能,其中有一步是邮箱验证,所以这边会在SpringBoot后台给用户的邮箱发个验证信息。如果发邮件,之前的文章教程里就有,这里就不说了,着重说说这两天发现所有用Gmail注册的用户都被退件的问题。报错现象先来看看具体......
  • [AHK2-UI] 实现自己的Show()方法
    为什么这其实是一种两阶段XX的设计模式,比如两阶段终止:调用终止方法时并不立即终止,而是设置终止信号,由别人自身决定终止的操作。同样,实现Show()方法算是一种两阶段启动:外部调用Show()方法时,由自身决定show前做什么,show后又做什么,以及如何show。例子这是一个Show()方法:staticS......
  • (2023.7.24)软件加密与解密-2-1-程序分析方法[XDbg].md
    每天一个技术点(2023.7.24)软件加密与解密-2-1-程序分析方法[XDbg]本文作者:XDbgPYG(小吧唧)发布时间:2023年7月24日内容概要:练一道题0.收集信息程序名:CrackMeDemo.tvmp.1.exe程序界面长相如下:程序内存长相如下:程序内存字符串长相如下:看样子......
  • ios 调用系统应用的方法 应用间跳转的方法
    声明一个私有方法:#pragmamark-私有方法-(void)openUrl:(NSString*)urlStr{//注意url中包含协议名称,iOS根据协议确定调用哪个应用,例如发送邮件是“sms://”其中“//”可以省略写成“sms:”(其他协议也是如此)NSURL*url=[NSURLURLWithString:urlStr];UIApplica......
  • Linux中特殊名字文件的删除方法是什么
    Linux中特殊名字文件的删除方法是什么发布时间:2022-01-2109:19:42 阅读:200 作者:kk 栏目:开发技术活动:Linux服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>今天就跟大家聊聊有关Linux中特殊名字文件的删除方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家......