LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

在 C# 中使用 except 和 intersect 比较集合

admin
2024年12月2日 9:45 本文热度 294

前言

.NET 提供了集合类型,它存储了一组数据。我们有时会在两个集合中进行比较,匹配或不不匹配的元素。本文探讨ExceptIntersect两个用来比较两个集合中的唯一元素和找出不匹配的元素扩展方法。

except

except是在二个集合比较中,找出在第一集合中有而第二个集合中没有的元素集,这种操作我们可称求差集

例如:我们有两个用户实体列表集合,当需要找出一个列表中可用,但在第二个列表中不可用的元素时。则可以使用except方法来实现。下面为示例代码:

定义用户实体类:

public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public string Mobile { get; set; } public string Password { get; set; }}

定义二个用户实体列表:

// 第一个列表集合List<User> szUsers = new(){    new User { Id = 1001, Name = "李华", Mobile = "13698765432", Email = "lihua@qq.com",Password="lh123456" },    new User { Id = 1002, Name = "小明", Mobile = "13677765432", Email = "xiaoming@qq.com",Password="xm123456" },    new User { Id = 1003, Name = "小米", Mobile = "123588887654", Email = "xiaomi@qq.com",Password="xm123456" }};// 第二个列表集合List<User> gzUsers = new(){    new User { Id=1004, Name="李华", Mobile="13698765432", Email="lihua@qq.com",Password="lh123456"},    new User { Id=1005, Name="小明", Mobile="13677765432", Email="xiaoming@qq.com",Password="xm123456" },    new User { Id=1006, Name="小强", Mobile="13499987654", Email="xiaoqiang@qq.com",Password="xq123456" }};

使用except 实现比较

using System.Text.Encodings.Web;using System.Text.Json;namespace Fountain.WinConsole.ExampleDemo{    internal class Program    {        static void Main(string[] args)        {            // 配置选项            var options = new JsonSerializerOptions            {                // 允许字符通过而不进行转义方面更加宽松                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping            };            // 比较每个元素,直接使用整个集合            List<User> diffnCollection = szUsers.Except(gzUsers).ToList();            Console.WriteLine($"不匹配集合:\r\n{JsonSerializer.Serialize(diffnCollection, options)}");            Console.WriteLine();            // 根据一些选定的元素检查未匹配的元素            var unMatchedElements = szUsers.Select(s => new { s.Mobile, s.Email }).Except(gzUsers.Select(s => new { s.Mobile, s.Email })).ToList();            Console.WriteLine($"不匹配元素:\r\n{JsonSerializer.Serialize(unMatchedElements, options)} ");            Console.WriteLine();            List<User> mismatchedCollection = szUsers.Where(x => unMatchedElements.Any(a => a.Email == x.Email) && unMatchedElements.Any(a => a.Mobile == x.Mobile)).ToList();            Console.WriteLine($"不匹配集合:\r\n{JsonSerializer.Serialize(mismatchedCollection, options)}");            Console.ReadKey();        }    }}

intersect

intersect是二个集合比较中,找出在第一集合与第二个集合中共有的元素集,这种操作我们可称求交集

例如:我们有两个用户实体列表集合,当需要找出二个列表中相同元素时。则可以使用intersect方法来实现。下面为示例代码:

using System.Text.Encodings.Web;using System.Text.Json;namespace Fountain.WinConsole.ExampleDemo{    internal class Program    { static void Main(string[] args)        { // 配置选项            var options = new JsonSerializerOptions            {                // 允许字符通过而不进行转义方面更加宽松                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping            };            // 使用 intersect 匹配比较            var matchedElesments = szUsers.Select(s => new { s.Mobile, s.Email }).Intersect(gzUsers.Select(s => new { s.Mobile, s.Email })).ToList();            Console.WriteLine($"匹配元素: \r\n{JsonSerializer.Serialize(matchedElements, options)}");            Console.WriteLine();            //             List<User> matchedCollection = szUsers.Where(x => matchedElements.Any(a => a.Email == x.Email) && matchedElements.Any(a => a.Mobile == x.Mobile)).ToList();            Console.WriteLine($"匹配集合: \r\n{JsonSerializer.Serialize(matchedCollection, options)}");            Console.ReadKey();        }    }}

下面再使用一个简单示例,演示了如何使用 Intersect 方法来获取两个集合的交集:

using System;using System.Collections.Generic;namespace Fountain.WinConsole.ExampleDemo{ class Program    {        static void Main()        {            // 创建两个集合 List<int> intList = new List<int> { 1, 2, 3, 4, 5 }; List<int> list = new List<int> { 4, 5, 6, 7, 8 };            // 使用 Intersect 方法获取交集 List<int> intersection = intList.Intersect(list).ToList();            // 输出交集            Console.WriteLine("匹配集合: " + string.Join(", ", intersection));        }    }}

小结

以上,通过使用except方法和intersect方法实现两个集合比较示例,了解其使用方法。它们在对集合进行比较时,也是可以使用的方式。


该文章在 2024/12/2 9:45:01 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved