LINQ基础之Intersect、Except和Distinct子句

LINQ基础之Intersect、Except和Distinct子句

在LINQ中,IntersectExceptDistinct都是集合操作符,用于将两个或多个集合进行相应的操作,并返回相应的结果集。

Distinct子句

Distinct操作符用于从序列中过滤重复的元素,只保留第一个出现的元素。例如:

var numbers = new [] { 1, 2, 3, 2, 4, 1 };
var distinctNumbers = numbers.Distinct();

// 结果集:1, 2, 3, 4

在上面的示例中,numbers数组中包含重复的数字1和2,但是在经过Distinct操作之后,只保留了每个数字第一次出现的元素,得到了不重复的数字集合。

需要注意的是,在进行Distinct操作时,需要保证集合中的元素实现了GetHashCodeEquals方法,以便操作符能够判断集合中的元素是否相等。

Intersect子句

Intersect操作符用于获取两个集合的交集,并返回结果集合。例如:

var numbers1 = new [] { 1, 2, 3, 4, 5 };
var numbers2 = new [] { 3, 4, 5, 6, 7 };
var intersectNumbers = numbers1.Intersect(numbers2);

// 结果集:3, 4, 5

在上面的示例中,numbers1numbers2两个集合都包含数字3、4、5,经过Intersect操作之后,返回包含这三个数字的集合作为结果集。

需要注意的是,进行Intersect操作时,集合中的元素需要实现GetHashCodeEquals方法。

Except子句

Except操作符用于返回source集合中没有出现在other集合中的元素集合。例如:

var numbers1 = new [] { 1, 2, 3, 4 };
var numbers2 = new [] { 3, 4, 5, 6 };
var exceptNumbers = numbers1.Except(numbers2);

// 结果集:1, 2

在上面的示例中,numbers1numbers2两个集合共包含4个数字3和4,通过Except操作符得到numbers1集合中没有出现在numbers2集合中的数字1和2。

需要注意的是,进行Except操作时,集合中的元素需要实现GetHashCodeEquals方法。

综合示例

下面的示例演示了如何同时使用这三个操作符,从两个数据集中获取不重复的数字,并计算这些数字的平均值:

var numbers1 = new [] { 1, 2, 3, 4 };
var numbers2 = new [] { 3, 4, 5, 6 };
var distinctNumbers = numbers1.Union(numbers2).Distinct();
var average = distinctNumbers.Average();

Console.WriteLine($"不重复数字集合平均值:{average}");

在上面的示例中,首先使用Union操作符将numbers1numbers2两个集合进行合并,然后使用Distinct操作符得到不重复的数字集合,最后通过Average操作符得到不重复数字集合的平均值。

通过这个示例,可以看到如何使用UnionDistinct操作符得到不重复的数字集合,以及如何计算集合中数字的平均值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:LINQ基础之Intersect、Except和Distinct子句 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#调用Matlab生成的dll方法的详细说明

    下面我会详细讲解C#调用Matlab生成的dll方法的完整攻略。步骤如下: 步骤一:生成Matlab的DLL文件 在Matlab中打开需要生成DLL的.m文件,在命令行中输入命令:mbuild -setup。根据提示选择安装需要的编译器,完成后在命令行中输入命令:mbuild <filename>.m,生成对应的DLL文件。 步骤二:在C#项目中…

    C# 2023年6月7日
    00
  • C#中new操作符的工作机制

    在C#中,使用new操作符可以实例化一个对象,即创建一个对象实例。new操作符有以下几个工作机制: 分配内存空间:new操作符会在内存中为对象分配一定的空间。这个空间包括对象的所有成员变量以及对象所继承的基类的成员变量。 调用构造函数:一旦分配了内存空间,在内存中创建了对象,new操作符会调用对象的构造函数,进行对象的初始化。 返回对象引用:在对象被创建并初…

    C# 2023年5月31日
    00
  • C#控制台程序的开发与打包为一个exe文件实例详解

    这里给出详细的“C#控制台程序的开发与打包为一个exe文件实例详解”,包括控制台程序的开发和如何将其打包为一个exe文件。 控制台程序的开发 首先,打开Visual Studio,选择新建项目,选择“控制台应用程序”,设置项目名称和位置,然后点击“确定”。 在“Program.cs”文件中,写入C#代码,实现需要的控制台应用程序功能。 以下是一个简单的hel…

    C# 2023年6月1日
    00
  • unity 切换场景不销毁物体问题的解决

    下面是详细讲解 “Unity切换场景不销毁物体问题的解决” 的完整攻略。 问题描述 在Unity中,切换场景时,场景中的物体通常都会被销毁并重新创建。但是,在某些情况下,我们希望在切换场景时不销毁某些物体,例如UI、游戏内人物等。那么该如何解决这个问题呢? 解决方法 方法一:使用DontDestroyOnLoad() Unity提供了DontDestroyO…

    C# 2023年6月3日
    00
  • C#检查Windows是否安装了某个服务的方法

    我将为您详细讲解“C#检查Windows是否安装了某个服务的方法”的完整攻略。 方法 要检查Windows是否安装了某个服务,我们可以使用C#语言提供的System.ServiceProcess命名空间中的ServiceController类。 该类允许我们检查、启动、停止、暂停或恢复Windows服务。 以下是使用ServiceController类检查W…

    C# 2023年6月7日
    00
  • Asp.net MVC下使用Bundle合并、压缩js与css文件详解

    Asp.net MVC是一个使用Model-View-Controller(MVC)架构模式开发Web应用程序的框架。在Asp.net MVC中,可以使用Bundle来合并、压缩Javascript (JS) 和Cascading Style Sheets (CSS) 文件以提高Web应用程序的性能。下面是使用Bundle合并和压缩JS和CSS文件的完整攻略…

    C# 2023年5月31日
    00
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus) 通过前面三篇文章的介绍,我们已经对.net co…

    C# 2023年5月3日
    00
  • ASP.NET Core 6.0 基于模型验证的数据验证功能

    下面我将为您介绍ASP.NET Core 6.0基于模型验证的数据验证功能的详细攻略。 1. 简介 ASP.NET Core 6.0 基于模型验证的数据验证功能旨在帮助开发人员验证用户提交的数据以确保数据的准确性和安全性。它可以通过将验证规则添加到模型中来实现这一目标,并在模型绑定期间对数据进行验证。 2. 添加验证规则 要在 ASP.NET Core 6.…

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