两个List< string>比较是否相同的N种方法,你用过哪种?
今天在一技术群看一群大佬讨论:
有没有优雅的写法,比较两个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种方法,你用过哪种?的更多相关文章
- 两个变量交换的四种方法(Java) 七种方法(JS)
两个变量交换的四种方法(Java) 对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 ...
- 安卓ListView操作的两种方法
举例做一个微信的中间部分(好友消息等信息通知) 第一种:BaseAdapter() package com.example.wx; import java.util.ArrayList;import ...
- MySQL中删除数据的两种方法
转自:http://blog.csdn.net/apache6/article/details/2778878 1. 在MySQL中有两种方法可以删除数据: 一种是delete语句,另一种是trunc ...
- php取两位小数的几种方法
php取两位小数的几种方法 一.总结 一句话总结: 1.round 四舍五入 2.sprintf c语言方式 3.number_format 千分位数字格式化的那个函数 二.php取两位小数的 ...
- 两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- android 之 启动画面的两种方法
现在,当我们打开任意的一个app时,其中的大部分都会显示一个启动界面,展示本公司的logo和当前的版本,有的则直接把广告放到了上面.启动画面的可以分为两种设置方式:一种是两个Activity实现,和一 ...
- [转载]C#读写txt文件的两种方法介绍
C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
随机推荐
- MySQL运维14-管理及监控工具Mycat-web的安装配置
一.Mycat-web介绍 Mycat-web(现改名为Mycat-eye)是对Mycat-server提供监控服务,通过JDBC连接对Mycat,MySQL监控,监控远程服务器的cpu,内存,网络, ...
- 数字孪生与GIS的结合:创新灾害预防管理的未来
近年来,全球频发的自然灾害给人们的生命和财产安全带来了巨大威胁,灾害预防管理成为当务之急.然而,随着数字孪生技术和GIS的迅猛发展,一种全新的解决方案正在崭露头角.数字孪生与GIS的结合,为灾害预防管 ...
- Java多线程学习(Day01)
目录 线程简介 线程实现(重点) 线程状态 线程同步(重点) 线程通信问题 进程与线程概念 --来自百度百科的解释: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资 ...
- 【Python】【OpenCV】定位条形码(一)
关于二维码和条形码的检测和识别,在OpenCV中已经有提供了对应的API,cv2.QRCodeDetector() | cv2.barcode_BarcodeDetector() ,相关的实现极其简单 ...
- 从零玩转Websocket实时通讯服务之前后端分离版本-websocket
title: 从零玩转Websocket实时通讯服务之前后端分离版本 date: 2021-10-25 00:47:12.945 updated: 2021-12-26 17:43:10.496 ur ...
- Redis 分片集群
1.Redis分片集群 1.1.搭建分片集群 主从和哨兵可以解决高可用.高并发读的问题.但是依然有两个问题没有解决: 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题,如图: 分片集群特 ...
- 为什么maven配置完Tomcat且运行之后页面内容没有显示出来?
1.如何在maven项目中配置一个webapp项目? 首先新建一个maven项目 项目目录 <?xml version="1.0" encoding="UTF-8& ...
- maven 实现pb的实时编译
<properties> <protobuf.version>3.15.7</protobuf.version></properties> <ex ...
- 拥抱Serverless释放生产力,探索华为云Serverless车联网最佳实践
华为云Serverless车联网场景解决方案,以FunctionGraph为核心的Serverless化组合方案,使用FunctionGraph.OBS.DIS等技术,可以实现架构的灵活扩展,在出行高 ...
- Rust太难?那是你没看到这套Rust语言学习万字指南!
摘要:从开发环境.语法.属性.内存管理和Unicode等五部分,为你带来一份详细的Rust语言学习的精华总结内容. 一.Rust开发环境指南 1.1 Rust代码执行 根据编译原理知识,编译器不是直接 ...