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#实现读取txt文件生成Word文档

    下面是”C#实现读取txt文件生成Word文档”的完整攻略: 1. 背景 在我们的开发过程中,经常需要将txt文本转化为Word文档,但Word文档是二进制格式的文档,不方便手动编辑,这时,我们可以通过C#程序来实现读取txt文件生成Word文档的操作。 2. 准备工作 安装Microsoft Office Word 16.0 Object Library …

    C# 2023年6月1日
    00
  • 一个可逆加密的类(使用3DES加密)

    下面是对 “一个可逆加密的类(使用3DES加密)” 的详细讲解。 1. 什么是可逆加密 可逆加密是一种加密方式,在加密后可以通过解密算法将密文还原成明文。常见的可逆加密算法有DES、3DES、AES等。 2. 使用3DES加密的类 3DES是一种对称加密算法,它使用3条56位的密钥,加密时分为三次进行加密操作,每次加密使用不同的密钥,因此也称为“三重DES”…

    C# 2023年6月7日
    00
  • asp.net 文章内容分页显示的代码

    为了实现文章内容的分页显示,我们可以使用 ASP.NET 内置的分页控件(Paging Control)或者自己手动实现分页功能。这里我将简单介绍一下自己手动实现分页功能的方法。 步骤一:确定需要分页的数据源 首先,我们需要确定需要分页显示的数据源,比如是从数据库、XML 文件或者其他来源获取的数据。为了演示方便,我们这里以从数组中获取数据为例。 strin…

    C# 2023年5月31日
    00
  • 深入讲解C#编程中嵌套类型和匿名类型的定义与使用

    深入讲解C#编程中嵌套类型与匿名类型 嵌套类型定义与使用 嵌套类型是在一个类或结构中定义其他类或结构。嵌套类可以有任何访问修饰符:public、protected、internal、和private。下面我们来看一个示例: public class OuterClass { private int outerField; public OuterClass(…

    C# 2023年5月31日
    00
  • 浅谈ASP.NET Core 中间件详解及项目实战

    ASP.NET Core 中间件是一种处理HTTP请求和响应的机制。中间件可以在请求到达控制器之前或响应返回给客户端之前执行一些操作。本文将详细讲解ASP.NET Core中间件的使用方法及项目实战。 什么是ASP.NET Core中间件? ASP.NET Core中间件是一种处理HTTP请求和响应的机制。中间件可以在请求到达控制器之前或响应返回给客户端之前…

    C# 2023年5月16日
    00
  • Entity Framework Core相关包的概念介绍与安装

    当我们使用.NET Core时,Entity Framework Core作为一种ORM(对象关系映射)框架,用于简化应用程序与关系型数据库之间的交互。 在使用Entity Framework Core之前,我们需要安装一些相关的软件包,本文将分为以下几个部分对Entity Framework Core相关包进行概念介绍与安装的攻略: Entity Fram…

    C# 2023年6月3日
    00
  • C#使用Socket实现心跳的方法示例

    下面是详细讲解“C#使用Socket实现心跳的方法示例”的完整攻略。 什么是心跳 心跳指的是客户端与服务器之间的心跳包交互,它是一种保证连接持续性和可靠性的机制。通过心跳包交互,客户端与服务器之间能够实时检测对方的存活状态,进而做出相应的处理,比如重连或关闭连接。 C#使用Socket实现心跳的方法 在C#中,我们可以通过Socket类来实现心跳包交互。实现…

    C# 2023年6月7日
    00
  • BootStrap mvcpager分页样式(get请求,刷新页面)

    下面是详细讲解”BootStrap mvcpager分页样式(get请求,刷新页面)”的攻略。 什么是Bootstrap MvcPager? Bootstrap MvcPager是一个基于ASP.NET MVC的分页控件,它支持Bootstrap 3和4版本,并且提供了多种自定义风格。利用它可以方便地实现Bootstrap风格的分页效果。 实现Bootstr…

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