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

有没有优雅的写法,比较两个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. 组合式api的使用方式

    方式一:通过setup选项 <script> export default { setup(){ // 提供数据 // 提供函数 // 提供计算属性等等..... } } </scr ...

  2. ngnix学习-反向代理

    代理:可以理解为中间商,用来帮助事物A和事物B建立连接的桥梁. 什么是反向代理呢,其实就是反过来,反客为主大家都知道吧. 说明: 这里稍微罗嗦一下.做一个说明. 正常情况下,你是需要干什么,才去干什么 ...

  3. 整一个工具类【根据URL地址获取file文件对象】

    整一个工具类[根据URL地址获取file文件对象] 直接将网络url文件转换为file对象 import java.io.*; import java.net.URL; public class Im ...

  4. 通过鼠标拖拉获取图片原像素的两个点坐标vue

    <template> <div> <img class="no-drag" ref="image" src="https ...

  5. Python从零到壹丨带你了解图像直方图理论知识和绘制实现

    摘要:本文将从OpenCV和Matplotlib两个方面介绍如何绘制直方图,这将为图像处理像素对比提供有效支撑. 本文分享自华为云社区<[Python从零到壹] 五十.图像增强及运算篇之图像直方 ...

  6. 有了这个数据强一致“利器”,DBA们轻松修复数据对加班“say no”

    摘要:不想加班修复数据?强一致的华为云数据库GaussDB(for Cassandra)来了-- 本文分享自华为云社区<HDC.Cloud2021|华为云GaussDB让开发者们不再加班修复数据 ...

  7. 高并发中,那些不得不说的线程池与ThreadPoolExecutor类

    摘要:从整体上认识下线程池中最核心的类之一--ThreadPoolExecutor,关于ThreadPoolExecutor的底层原理和源码实现,以及线程池中的其他技术细节的底层原理和源码实现. 本文 ...

  8. Snack3 3.1.10的新特性及应用

    <dependency> <groupId>org.noear</groupId> <artifactId>snack3</artifactId& ...

  9. Python pdf 转 图片

    安装依赖 D:\OpenSource\Python>pip install pdf2image pillow -i https://pypi.tuna.tsinghua.edu.cn/simpl ...

  10. compilation.templatesPlugin is not a function

    ERROR Failed to compile with 1 error TypeError: compilation.templatesPlugin is not a function - SetV ...