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

有没有优雅的写法,比较两个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. ASR项目实战-构建Kaldi

    准备工作 安装构建时依赖的基础软件 软件清单如下: bzip2 python3 automake libtool cmake gcc g++ gfortran git subversion 不同平台安 ...

  2. const和C指针

    转载:https://mp.weixin.qq.com/s?__biz=Mzk0NDYzNTI1Ng==&mid=2247483733&idx=1&sn=9af9bc64a0b ...

  3. .NET MAUI (微软 .Net 6 跨多平台应用 UI)框架的研究学习

    针对 .NET MAUI (微软 .Net 6 跨多平台应用 UI)框架的研究学习,使用VS2022  C# 和 XAML 创建本机移动和桌面应用,开发一套代码可以发布在 Android . iOS ...

  4. 手写spring的ioc的流程截图(笔记-1)

    spring ioc是什么? IoC 容器是 Spring 的核心,也可以称为 Spring 容器.Spring 通过 IoC 容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期. S ...

  5. 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 16.优化交互,实现看到物体时出现交互提示

    斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 概述 本篇文章对应Lecture 18 – Creating Buffs, World Interaction, 73 ...

  6. 2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印

    2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印 1*** 3*** 2*** 4*** 5*** 6*** ...

  7. 升级win11显示:此版本的windows不支持该处理器—如何强升win11?

    今天的我微信笔记本 msi gp62 mvr 无论是win10升级到win11 还是安装win11都无法安装.显示: Windows 11不支持该处理器 win11系统升级标准要求相比win10来说有 ...

  8. vite/storybook/rollup搭建一个自己的组件库

    构建测试项目 首先vite 初始化一个项目 vue create story-book-demo ## 或者 vue create story-book-demo 然后添加storybook ,具体参 ...

  9. 在线就能用的 SQL 练习平台(附SQL学习文档)

    对大数据和数据分析感兴趣的同学,如何入门一直是一个大问题. 而对于找工作的同学,笔试和面试环节也一直是一个让人头疼的问题. 其实企业也很头疼,不进行笔试,怕被面试者忽悠.进行笔试可能又把某些大牛筛出去 ...

  10. PLS-00103: 出现符号 ")"在需要下列之一时

    执行 Oracle 存储过程时,出现 "PLS-00103: 出现符号 ")"在需要下列之一时:", Cause: java.sql.SQLException: ...