今天在一技术群看一群大佬讨论:

有没有优雅的写法,比较两个List集合中的元素是不是完全一致...

站长最近也无聊,通过群里的聊天记录和给出的参考链接,简单做做总结,万一后面大家能用上呢?

我们做简单点,通过多种方式比较两个列表长度、所包含元素是否相等,不考虑顺序。

给出下面两个列表,按比较要求,两个列表是相等的:

List<string> lst1 = new List<string> { "2", "3", "1" };
List<string> lst2 = new List<string> { "1", "3", "2" };

方法一

由勤快哥给出的建议:排序后,通过string.join的方法转换为两个字符串后再比较,下面是代码:

Console.WriteLine("列表排序转换为字符串再比较");

lst1.Sort();
lst2.Sort();
var lstStr1 = string.Join(',',lst1);
var lstStr2 = string.Join(',', lst2);
bool isEquals = lstStr1.Equals(lstStr2); // true Console.WriteLine($"两者排序后通过(string.Join)转换为字符串:{isEquals}\r\n\r\n");

方法二和方法三由群里的tim大佬给的 stackoverflow 问题截图而来。

方法二

相较上面将列表转换字符串的方式,方法二简单点,排序后,使用SequenceEqual方法比较。

Console.WriteLine("使用Linq比较两个列表是否相等");
bool isEquals = Enumerable.SequenceEqual(lst1, lst2); // false Console.WriteLine($"两者直接通过(Enumerable.SequenceEqual(lst1, lst2))比较:{isEquals}"); // 1、集合排序再比较
lst1.Sort();
lst2.Sort();
isEquals = Enumerable.SequenceEqual(lst1, lst2); // true // 2、或者使用Linq的方式排序后再比较,一行代码的事儿
//isEquals = lst1.OrderBy(a => a).SequenceEqual(lst2.OrderBy(a=>a)); // true Console.WriteLine($"两者排序后通过(Enumerable.SequenceEqual(lst1, lst2))比较:{isEquals}\r\n\r\n");

方法三

使用Lambda表达式,先取两列表的相同元素,然后将结果与列表1、列表2个数进行比较得到最终结果,代码如下:

Console.WriteLine("第二种:使用Lambda表达式比较两个列表是否相等");

var q = from a in lst1
join b in lst2 on a equals b
select a; var isEquals = ((lst1.Count == lst2.Count)
&& (q.Count() == lst1.Count)); // false Console.WriteLine($"两者通过Lambda表达式比较:{isEquals}\r\n\r\n");

以上三种方法,都能得到最终比较结果,更多的方法,请查看下面由tim大佬搜索提供的链接:

https://stackoverflow.com/questions/649444/testing-equality-of-arrays-in-c-sharp

两个List< string>比较是否相同的N种方法,你用过哪种?的更多相关文章

  1. 两个变量交换的四种方法(Java) 七种方法(JS)

    两个变量交换的四种方法(Java)   对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 ...

  2. 安卓ListView操作的两种方法

    举例做一个微信的中间部分(好友消息等信息通知) 第一种:BaseAdapter() package com.example.wx; import java.util.ArrayList;import ...

  3. MySQL中删除数据的两种方法

    转自:http://blog.csdn.net/apache6/article/details/2778878 1. 在MySQL中有两种方法可以删除数据: 一种是delete语句,另一种是trunc ...

  4. php取两位小数的几种方法

    php取两位小数的几种方法 一.总结 一句话总结: 1.round   四舍五入 2.sprintf   c语言方式 3.number_format 千分位数字格式化的那个函数 二.php取两位小数的 ...

  5. 两个变量交换的四种方法(Java)

    对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...

  6. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  7. android 之 启动画面的两种方法

    现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...

  8. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  9. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  10. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

随机推荐

  1. selenium之三种等待,强制等待、隐式等待和显式等待

    显式等待 presence_of_element_locatedpresence_of_all_elements_locatedvisibility_of_any_elements_located   ...

  2. ElasticSearch之cat shards API

    命令样例如下: curl -X GET "https://localhost:9200/_cat/shards?v=true&pretty" --cacert $ES_HO ...

  3. Supershell防溯源反制配置

    简介 项目地址:https://github.com/tdragon6/Supershell Supershell是一个集成了reverse_ssh服务的WEB管理平台,使用docker一键部署(快速 ...

  4. eclipse 使用技巧和java相关

    1,内容提示:alt + /     需要配置:windwos ->preferences中搜索keys,搜索alt +/ 发现它配置的是单词完成.搜索content  assist,将alt ...

  5. Rasa中的tracker_store和event_broker

      Rasa 中的 tracker_store 相对主流为 Redis,event_broker 相对主流为 RabbitMQ.后续为了研究学习直接将 tracker_store 和 event_br ...

  6. C++篇:第十二章_文件及IO_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 十二.文件及IO 当在输入输出流中使用控制符进行格式控制时,需在程序中加入头文件 ...

  7. 有了这个告警系统,DBA提前预警不是难题

    摘要:告警功能是各大云平台必不可少的模块,个性化的告警配置,为帮助用户和运维人员及时发现问题发挥着重要作用. 本文分享自华为云社区<GaussDB(DWS) 数据库智能监控系统告警框架上线啦!& ...

  8. 云小课 | SA基线检查—给云服务的一次全面“体检”

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云态势感知( ...

  9. mysql新增数据库新增用户并授权用户

    -- 创建数据库CREATE DATABASE  baseName; -- 创建用户CREATE USER 'userName' @ '访问限制' IDENTIFIED BY 'password'; ...

  10. 通过mongo-driver使用说明 GO 包管理机制

    本篇记录通过GO语言操作mongodb,实现的流程包括: 初始化项目工程 容器方式安装mongo 调试运行和编译运行 go使用mongo的代码如下,go操作mongo的SDK是mongo-driver ...