C# Linq的Intersect()方法 – 返回两个序列的交集

C# Linq Intersect()方法详解

Intersect()方法的定义

Intersect()方法是C# Linq方法之一,用于返回两个序列中共同出现的元素。该方法有两个重载版本,一个是无参数版本,返回两个序列中的重复元素,一个是带有另外一个序列作为参数的版本,返回两个序列中相同的元素。

无参数版本

无参数版本的Intersect()方法用于从两个序列中返回所有重复的元素。

Intersect()方法的基本语法如下:

Enumerable.Intersect<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second)

其中,first代表第一个序列,second代表第二个序列,TSource表示序列中的元素类型。方法返回一个IEnumerable<TSource>类型的序列,包含两个序列中的重复元素。

下面是一个无参数版本的Intersect()方法的示例:

var nums1 = new List<int> {1, 2, 3, 4};
var nums2 = new List<int> {3, 4, 5, 6};
var result = nums1.Intersect(nums2);
// 输出:3 4
foreach(var num in result)
{
    Console.Write(num + " ");
}

带参数版本

带参数版本的Intersect()方法用于从两个序列中返回相同的元素。

Intersect()方法的带参数语法如下:

Enumerable.Intersect<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)

其中,first代表第一个序列,second代表第二个序列,comparer是一个实现了IEqualityComparer<TSource>接口的对象,用于比较元素的相等性。方法返回一个IEnumerable<TSource>类型的序列,包含两个序列中相同的元素。

下面是一个带参数版本的Intersect()方法的示例:

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person person)
        {
            return Id.Equals(person.Id);
        }
        return false;
    }

    public override int GetHashCode()
    {
        return Id.GetHashCode();
    }
}

var list1 = new List<Person>
{
    new Person { Id = 1, Name = "Person1" },
    new Person { Id = 2, Name = "Person2" },
    new Person { Id = 3, Name = "Person3" },
    new Person { Id = 4, Name = "Person4" },
};

var list2 = new List<Person>
{
    new Person { Id = 3, Name = "Person3" },
    new Person { Id = 4, Name = "Person4" },
    new Person { Id = 5, Name = "Person5" },
    new Person { Id = 6, Name = "Person6" },
};

var intersectList = list1.Intersect(list2, new PersonComparer());
// 输出:3 Person3 4 Person4
foreach (var item in intersectList)
{
    Console.WriteLine($"{item.Id} {item.Name}");
}

public class PersonComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        return x.Id == y.Id;
    }

    public int GetHashCode(Person obj)
    {
        return obj.Id.GetHashCode();
    }
}

在这个示例中,两个列表都包含Person对象。我们自定义了一个PersonComparer类,它实现了IEqualityComparer<Person>接口,用于判断两个对象是否相等。通过带参数版本的Intersect()方法,我们将两个列表中的Person对象进行了比较,并返回了列表中相同的元素。

Intersect应用场景示例

Intersect()方法常用于在两个集合中查找并返回共同出现的元素,例如:

1.查找两个数组中相同的元素:

int[] numArray1 = { 1, 2, 3, 4, 5 };
int[] numArray2 = { 3, 4, 5, 6, 7 };
var result = numArray1.Intersect(numArray2);
foreach (var num in result)
{
    Console.WriteLine(num);
}

2.查找两个列表中相同的对象:

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person person)
        {
            return Id.Equals(person.Id);
        }
        return false;
    }

    public override int GetHashCode()
    {
        return Id.GetHashCode();
    }
}

var list1 = new List<Person>
{
    new Person { Id = 1, Name = "Person1" },
    new Person { Id = 2, Name = "Person2" },
    new Person { Id = 3, Name = "Person3" },
    new Person { Id = 4, Name = "Person4" },
};

var list2 = new List<Person>
{
    new Person { Id = 3, Name = "Person3" },
    new Person { Id = 4, Name = "Person4" },
    new Person { Id = 5, Name = "Person5" },
    new Person { Id = 6, Name = "Person6" },
};

var intersectList = list1.Intersect(list2, new PersonComparer());
foreach (var item in intersectList)
{
    Console.WriteLine($"{item.Id} {item.Name}");
}

public class PersonComparer : IEqualityComparer<Person>
{
    public bool Equals(Person x, Person y)
    {
        return x.Id == y.Id;
    }

    public int GetHashCode(Person obj)
    {
        return obj.Id.GetHashCode();
    }
}

以上就是Intersect()方法的完整攻略,通过这篇介绍,我们可以清楚地了解Intersect()方法及其使用场景。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Linq的Intersect()方法 – 返回两个序列的交集 - Python技术站

(0)
上一篇 2023年4月19日
下一篇 2023年4月19日

相关文章

  • 分析C# Dictionary的实现原理

    分析C# Dictionary的实现原理 前言 C#中的Dictionary是一种常见的数据结构,它能够高效地存储Key-Value形式的数据。在我们使用它的时候,也需要了解其内部实现原理。 实现原理 C#中的Dictionary内部实现是采用哈希表来存储数据的。哈希表是一种非常重要的数据结构,它可以通过哈希函数将Key转换成哈希码,然后将哈希码映射到一个固…

    C# 2023年5月15日
    00
  • ASP.NET MVC实现城市或车型三级联动

    当我们需要实现城市或车型三级联动的功能时,可以使用 ASP.NET MVC 框架来实现。下面是详细的攻略: 步骤1:创建数据库 在 SQL Server 中创建一个名为“City”的数据库,并添加以下表: Province 表 列名 数据类型 Id int Name nvarchar(50) City 表 列名 数据类型 Id int Name nvarch…

    C# 2023年5月12日
    00
  • ASP.NET Core基础之启动设置

    ASP.NET Core基础之启动设置 ASP.NET Core是一个跨平台的开源Web框架,它可以在Windows、Linux和macOS上运行。在ASP.NET Core应用程序中,启动设置是非常重要的,因为它们决定了应用程序的行为和性能。本文将介绍ASP.NET Core应用程序的启动设置,并提供一些示例来说明如何使用它们。 启动设置 ASP.NET …

    C# 2023年5月17日
    00
  • C# try catch代码块不起效果的解决方法

    针对C# try catch 代码块不起效果的解决方法,可以有以下步骤: 问题分析 首先要明确为什么try catch代码块不起效果。常见的因素有: 代码中没有处理异常:即没有使用try catch代码块或者try catch代码块中没有正确的异常处理逻辑; 异常被忽略:即异常被抛出后没有被及时捕获处理; 异常被隐藏:即try catch代码块存在层级关系,…

    C# 2023年6月6日
    00
  • 详解WCF服务中的svc文件

    当我们创建一个WCF服务时,会自动在项目中生成一个.svc文件,这个文件是我们用来定义服务的元数据信息以及服务终结点的文件。在本次攻略中,我们将详细讲解svc文件的作用,以及如何正确配置svc文件来使服务正常运行。 什么是svc文件 .svc文件是WCF服务中的元数据信息文件,它用于定义服务的元数据信息和终结点信息。服务的元数据信息主要包括服务契约(Serv…

    C# 2023年5月15日
    00
  • 非常实用的C#字符串操作处理类StringHelper.cs

    我们来详细讲解一下C#字符串操作处理类StringHelper.cs。 一、概述 StringHelper.cs是一个字符串操作类,主要提供了一些常见的字符串操作方法。这些方法包括截取字符串、判断字符串是否为空、去除字符串中的空格等。 二、类中方法的介绍 下面我们来分别介绍该类中的方法。 1. IsNullOrEmpty public static bool…

    C# 2023年6月7日
    00
  • C#使用Process类调用外部程序分解

    使用Process类调用外部程序分解 在C#中,我们可以使用Process类来调用并控制外部程序的运行。常见的用途之一是运行一些命令行程序或工具,以获取额外的功能。 使用Process类调用外部程序 使用Process类的关键步骤如下: 引入命名空间 using System.Diagnostics; 创建Process对象 Process process …

    C# 2023年6月7日
    00
  • ASP.NET Core中自定义路由约束的实现

    ASP.NET Core中自定义路由约束的实现 在 ASP.NET Core 中,路由约束是一种用于限制路由匹配的机制。默认情况下,ASP.NET Core 提供了一些常见的路由约束,例如正则表达式约束和长度约束。但是,有时候我们需要自定义路由约束来满足特定的需求。在本攻略中,我们将介绍 ASP.NET Core 中自定义路由约束的实现,包括如何创建和使用自…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部