C# 比较两个List集合内容是否相同
在 C# 中,要比较两个 List<T> 集合的内容是否相同,可以通过以下几种方法:
一、非自定义类的元素比较
1. 使用 SequenceEqual 方法(顺序和内容都相等)
顺序和内容都相等:使用 SequenceEqual。
using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){List<int> list1 = new List<int> { 1, 2, 3, 4 };List<int> list2 = new List<int> { 1, 2, 3, 4 };bool areEqual = list1.SequenceEqual(list2);Console.WriteLine($"Are the lists equal? {areEqual}");}
}
2. 自定义比较逻辑(如果顺序不重要)
忽略顺序:可以先对两个列表排序后再使用 SequenceEqual。
using System;
using System.Collections.Generic;
using System.Linq;class Program
{static void Main(){List<int> list1 = new List<int> { 1, 2, 3, 4 };List<int> list2 = new List<int> { 4, 3, 2, 1 };bool areEqual = list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x));Console.WriteLine($"Are the lists equal (ignoring order)? {areEqual}");}
}
3. 使用 Set 比较(忽略重复元素)
忽略重复元素:可以使用 HashSet<T>。
using System;
using System.Collections.Generic;class Program
{static void Main(){List<int> list1 = new List<int> { 1, 2, 3, 4 };List<int> list2 = new List<int> { 4, 3, 2, 1 };bool areEqual = new HashSet<int>(list1).SetEquals(list2);Console.WriteLine($"Are the lists equal (ignoring duplicates)? {areEqual}");}
}
二、自定义类的元素比较
如果你想比较自定义对象的集合,比如 List<MyClass>,你需要自定义比较规则。默认情况下,List<T> 的比较是基于对象引用的比较(即两个对象的引用是否相同),而不是根据对象的内容来判断。
为了比较自定义元素,你需要重写 Equals 和 GetHashCode 方法。这样,比较时会依据你定义的规则进行比较。
假设你有一个自定义类 Person,你想根据 Name 和 Age 属性来判断两个 Person 对象是否相同。
重写 Equals 和 GetHashCode
你需要重写 Equals 方法来比较两个对象是否相等,并且重写 GetHashCode,以确保集合操作(如 HashSet 和 Except)正常工作。
1、Equals 方法比较两个 Person 对象的 Name 和 Age 属性。
public override bool Equals(object obj){if (obj is Person other){return this.Name == other.Name && this.Age == other.Age;}return false;}
2、GetHashCode 使用 HashCode.Combine 来生成一个基于 Name 和 Age 的哈希值,确保两个内容相同的 Person 对象具有相同的哈希值。
public override int GetHashCode(){return HashCode.Combine(Name, Age);}
1. 顺序和内容都相等
顺序和内容都相等:使用 SequenceEqual。
using System;
using System.Collections.Generic;
using System.Linq;class Person
{public string Name { get; set; }public int Age { get; set; }public override bool Equals(object obj){if (obj is Person other){return this.Name == other.Name && this.Age == other.Age;}return false;}public override int GetHashCode(){return HashCode.Combine(Name, Age);}
}class Program
{static void Main(){List<Person> list1 = new List<Person>{new Person { Name = "Alice", Age = 25 },new Person { Name = "Bob", Age = 30 }};List<Person> list2 = new List<Person>{new Person { Name = "Alice", Age = 25 },new Person { Name = "Bob", Age = 30 }};bool isSame = list1.SequenceEqual(list2);Console.WriteLine($"顺序和内容都相等: {isSame}");}
}
2. 忽略顺序
忽略顺序:先对两个列表排序,然后使用 SequenceEqual。
using System;
using System.Collections.Generic;
using System.Linq;class Person
{public string Name { get; set; }public int Age { get; set; }public override bool Equals(object obj){if (obj is Person other){return this.Name == other.Name && this.Age == other.Age;}return false;}public override int GetHashCode(){return HashCode.Combine(Name, Age);}
}class Program
{static void Main(){List<Person> list1 = new List<Person>{new Person { Name = "Alice", Age = 25 },new Person { Name = "Bob", Age = 30 }};List<Person> list2 = new List<Person>{new Person { Name = "Bob", Age = 30 },new Person { Name = "Alice", Age = 25 }};bool isSame = list1.OrderBy(p => p.Name).ThenBy(p => p.Age).SequenceEqual(list2.OrderBy(p => p.Name).ThenBy(p => p.Age));Console.WriteLine($"忽略顺序: {isSame}");}
}
3. 忽略重复元素
忽略重复元素:将列表转换为 HashSet<T>,然后使用 SetEquals 方法进行比较。
如果你希望忽略重复元素并只关心唯一元素是否相同,可以使用 HashSet<T> 来进行比较。HashSet<T> 会自动去除重复元素,因此可以通过将列表转换为 HashSet<T> 来忽略重复元素。
using System;
using System.Collections.Generic;class Person
{public string Name { get; set; }public int Age { get; set; }public override bool Equals(object obj){if (obj is Person other){return this.Name == other.Name && this.Age == other.Age;}return false;}public override int GetHashCode(){return HashCode.Combine(Name, Age);}
}class Program
{static void Main(){List<Person> list1 = new List<Person>{new Person { Name = "Alice", Age = 25 },new Person { Name = "Alice", Age = 25 },new Person { Name = "Bob", Age = 30 }};List<Person> list2 = new List<Person>{new Person { Name = "Bob", Age = 30 },new Person { Name = "Alice", Age = 25 }};bool isSame = new HashSet<Person>(list1).SetEquals(new HashSet<Person>(list2));Console.WriteLine($"忽略重复元素: {isSame}");}
}
总结
- 顺序和内容都相等:使用
SequenceEqual。 - 忽略顺序:可以先对两个列表排序后再使用
SequenceEqual。 - 忽略重复元素:可以使用
HashSet<T>。
相关文章:
C# 比较两个List集合内容是否相同
在 C# 中,要比较两个 List<T> 集合的内容是否相同,可以通过以下几种方法: 一、非自定义类的元素比较 1. 使用 SequenceEqual 方法(顺序和内容都相等) 顺序和内容都相等:使用 SequenceEqual。 usin…...
vue2 多页面pdf预览
使用pdfjs-dist预览pdf,实现预加载,滚动条翻页。pdfjs的版本很重要,换了好多版本,终于有一个能用的 node 20.18.1 "pdfjs-dist": "^2.2.228", vue页面代码如下 <template><div v-loading"loa…...
【python】matplotlib(animation)
文章目录 1、matplotlib.animation1.1、FuncAnimation1.2、修改 matplotlib 背景 2、matplotlib imageio2.1、折线图2.2、条形图2.3、散点图 3、参考 1、matplotlib.animation 1.1、FuncAnimation matplotlib.animation.FuncAnimation 是 Matplotlib 库中用于创建动画的一个…...
Hello Robot 推出Stretch 3移动操作机器人,赋能研究与商业应用
Hello Robot公司近日发布了其新一代开源移动操作机器人Stretch 3,这是一款高度灵活的机器人平台,专为机器人研究、教育实验和商业自动化设计。Stretch 3 结合了先进的移动机器人技术、灵巧操作能力和开源软件生态系统,为用户提供了一个功能强…...
从零到一:我的元宵灯谜小程序诞生记
缘起:一碗汤圆引发的灵感 去年元宵节,我正捧着热腾腾的汤圆刷朋友圈,满屏都是"转发锦鲤求灯谜答案"的动态。看着大家对着手机手忙脚乱地切换浏览器查答案,我突然拍案而起:为什么不做一个能即时猜灯谜的微信…...
Docker 安装与配置 Nginx
摘要 1、本文全面介绍了如何在 Docker 环境中安装和配置 Nginx 容器。 2、文中详细解释了如何设置 HTTPS 安全连接及配置 Nginx 以实现前后端分离的代理服务。 2、同时,探讨了通过 IP 和域名两种方式访问 Nginx 服务的具体配置方法 3、此外,文章还涵…...
Oracle常见语法
一、求交集 SELECT column1, column2 FROM table1 INTERSECT SELECT column1, column2 FROM table2;INTERSECT 操作符是 Oracle 和一些其他数据库(如 PostgreSQL 和 SQL Server)特有的集合操作符,在 MySQL 中并不直接支持。MYSQL同效果代码&a…...
在Vue3中使用Echarts的示例 两种方法
在Vue 3中使用ECharts可以通过两种主要方法实现:全局安装和组件封装。下面我将分别 介绍这两种方法的具体实现步骤。 方法1:全局安装 1.安装ECharts 在你的Vue项目中,首先需要安装ECharts。打开终端,运行以下命令: Bash copy code npm install ec…...
【docker】docker改动镜像并重新编译举例
docker改动镜像并重新编译举例 使用vllm启动Qwen VL 2.5出现报错 0.7.2 Docker Container doesnt support Qwen VL 2.5 Instruct 查看镜像 docker images 会发现本地有vllm/vllm-openai:v0.7.2镜像,id为f78c8f2f8ad5 空白文件夹中新建文件Dockerfile 写入&#…...
具身智能训练新思路!将生成视频用于训练机器人
将生成视频用于训练具身智能(Embodied AI)确实是近年来备受关注的前沿方向,这一思路通过结合生成式AI(如扩散模型、神经辐射场等)与机器人学习,为解决真实世界数据稀缺、训练成本高等问题提供了新可能。以下从技术逻辑、潜在优势、挑战及案例方向展开分析: 一、技术逻辑…...
15、深度学习-自学之路-反向传播程序展示、激活函数的应用,反向权重的更新、2层神经网络的应用,输入输出相关性的理解。
这个里面要学习和展示的内容会比较多,需要好好的认真思考 第一个要思考的就是:输入和输出相关性的理解,我们先拿一层的神经网络来说明一下, 输入有2个因素,对应有两个权重,输出有一个结果。 输入的两个因…...
【JavaEE进阶】依赖注入 DI详解
目录 🌴什么是依赖注入 🎄依赖注入的三种方法 🚩属性注⼊(Field Injection) 🚩Setter注入 🚩构造方法注入 🚩三种注⼊的优缺点 🌳Autowired存在的问题 🌲解决Autowired存在的…...
医疗影响分割 | 使用 Swin UNETR 训练自己的数据集(3D医疗影像分割教程)
<Swin UNETR: Swin Transformers for Semantic Segmentation of Brain Tumors in MRI Images> 代码地址:unetr 论文地址:https://arxiv.org/pdf/2201.01266 一、下载代码 在Github上下载代码,然后进入SWINUNETR,前两个是针对两个数据集(BRATS21、BTCV)的操作,这里…...
IGBT的两级关断
IGBT(绝缘栅双极型晶体管)的两级关断(Two-stage turn-off)是一种优化关断过程的方法,主要用于减少关断时的电压过冲和dv/dt(电压变化率)过高的问题,特别是在大功率应用中(…...
微服务与网关
什么是网关 背景 单体项目中,前端只用访问指定的一个端口8080,就可以得到任何想要的数据 微服务项目中,ip是不断变化的,端口是多个的 解决方案:网关 网关:就是网络的关口,负责请求的路由、转发…...
“云计算一哥”一口气发布6个大模型、3nm芯片!多模态还要搞Any-to-Any
金磊 发自 拉斯维加斯量子位 | 公众号 QbitAI 就在刚刚,云计算一哥亚马逊云科技,在大模型这件事儿上搞了波大的—— 亚马逊CEO Andy Jassy亲自站台re:Invent24,发布自家新款AI多模态系列大模型,名曰Amazon Nova。 而且是一口气涵盖…...
pytest生成报告no tests ran in 0.01s
除了基本的环境配置、用例名要以test_开头,有个地方是我自己忽略了,在执行时没有指定用例文件,所以没有找到。 if __name__ __main__:pytest.main(["testcases/test_demo.py","-svq", __file__, --alluredir./allure-r…...
如何修改DNS解析?
DNS(域名系统)就像互联网的“电话簿”,负责将我们输入的网址转换为计算机能够理解的IP地址。如果DNS解析出现问题,访问网站就会受到影响。那我们该如何修改DNS解析呢?接下来,我们就来介绍一下这个话题。 为什么要修改DNS解析? 使用默认的…...
PyTorch 中 `torch.cuda.amp` 相关警告的解决方法
在最近的写代码过程中,遇到了两个与 PyTorch 的混合精度训练相关的警告信息。这里随手记录一下。 警告内容 警告 1: torch.cuda.amp.autocast FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) i…...
微服务组件LoadBalancer负载均衡
SpringCloud 从 2020.0.1 版本开始,移除了 Ribbon 组件,使⽤Spring Cloud LoadBalancer 组件来代 替 Ribbon 实现客户端负载均衡 loadbalancer负载均衡: 复制一份provider项目,服务名一致,端口号不一致,让consumer调…...
Google ADK实战:用Python代码构建可控、可测试的AI智能体系统
1. 项目概述:从代码出发,构建可控的智能体如果你正在寻找一个能让你用写代码的方式,从零开始构建、测试和部署复杂AI智能体的框架,那么Google开源的Agent Development Kit(ADK)Python版,绝对值得…...
从手机拍照到工业质检:聊聊自适应白平衡算法在实际项目里的那些‘坑’
从手机拍照到工业质检:自适应白平衡算法的实战避坑指南 在工业视觉检测线上,一台价值百万的自动化设备突然频繁误判产品颜色——原因竟是车间顶灯老化导致色温偏移,而算法团队引以为傲的"完美反射"白平衡模型完全失效。类似场景每天…...
基于Hetzner GPU云服务器与Ollama部署私有AI编程助手实战指南
1. 项目概述与核心价值最近在折腾一个事儿:把我自己用的AI编程助手,从本地电脑搬到云服务器上去。这事儿听起来有点技术含量,但其实核心逻辑很简单——本地电脑的显卡(尤其是消费级的)跑大模型,要么慢&…...
别再为地址映射头疼了!台达DVP50MC11T与西门子/欧姆龙PLC的Modbus通信差异对比
台达DVP50MC11T与主流PLC的Modbus通信地址映射实战解析 在工业自动化项目中,Modbus通信协议因其简单可靠的特点被广泛应用。但对于熟悉西门子或欧姆龙PLC的工程师来说,初次接触台达DVP50MC11T系列时,往往会对其特殊的地址映射方式感到困惑。…...
Nodeunit自定义reporters开发:打造个性化测试输出格式
Nodeunit自定义reporters开发:打造个性化测试输出格式 【免费下载链接】nodeunit Easy unit testing in node.js and the browser, based on the assert module. 项目地址: https://gitcode.com/gh_mirrors/no/nodeunit Nodeunit是一款简单易用的Node.js单元…...
基于OpenClaw与Binance API的加密货币安全助手:四层架构与实战部署
1. 项目概述:一个为普通人打造的加密资产守护神在加密货币的世界里,技术壁垒和信息不对称就像一道无形的墙,将许多普通人挡在了安全投资的门外。我们见过太多这样的场景:一位想为子女攒点教育金的母亲,因为误点了钓鱼链…...
对比按需调用与Token Plan套餐的实际支出感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按需调用与Token Plan套餐的实际支出感受 对于个人开发者或小型团队而言,在大模型API的日常使用中,成本…...
Fillinger智能填充插件:如何用3分钟完成1小时的设计工作?
Fillinger智能填充插件:如何用3分钟完成1小时的设计工作? 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中繁琐的图案填充而头疼吗…...
5个关键技巧:掌握AutoJs6界面布局设计的最佳实践
5个关键技巧:掌握AutoJs6界面布局设计的最佳实践 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 AutoJs6作为安卓平台领先的JavaScript自动化工具,其界面…...
AnyFlip下载器终极指南:3分钟快速将在线翻页书转为PDF
AnyFlip下载器终极指南:3分钟快速将在线翻页书转为PDF 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 你是否在AnyFlip上发现了心仪的电子书,却苦于无法下…...
