C#中的Linq Intersect与Except方法使用实例
作者:junjie 发布时间:2021-11-30 01:25:52
标签:C#,Linq,Intersect,Except,方法
实例描述
现有某班学生的两份成绩,两份成绩中存在一些不一致的记录。需借助于编程方法找出这些不一致的记录。
实例代码
using System;
using System.Collections.Generic;
using System.Linq;
namespace IntersectAndExceptExp
{
class Program
{
static void Main(string[] args)
{
List<Student> studentList1 = newList<Student>() {
new Student(){StudentId=1,Score=64},
new Student(){StudentId=2,Score=85},
new Student(){StudentId=3,Score=78},
new Student(){StudentId=4,Score=94},
new Student(){StudentId=5,Score=90}
};
List<Student> studentList2 = newList<Student>() {
new Student(){StudentId=1,Score=64},
new Student(){StudentId=2,Score=80},
new Student(){StudentId=3,Score=78},
new Student(){StudentId=4,Score=94},
new Student(){StudentId=5,Score=95}
};
var both = studentList1.Intersect(studentList2,new StudentComparer());
var diff1 =studentList1.Except(both, new StudentComparer());
var diff2 =studentList2.Except(both, new StudentComparer());
Console.WriteLine("-------------下面是两份成绩中不同的记录--------------");
Console.WriteLine("-------------第一份学生成绩--------------");
foreach (var s in diff1)
{
Console.WriteLine("StudentId:"+s.StudentId+";Score:"+s.Score);
}
Console.WriteLine("-------------第一份学生成绩--------------");
foreach (var s in diff2)
{
Console.WriteLine("StudentId:"+ s.StudentId + ";Score:" + s.Score);
}
}
}
public class Student
{
public int StudentId { get; set; }
public int Score { get; set; }
}
public class StudentComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Studenty)
{
if (Object.ReferenceEquals(x, y)) returntrue;
return x != null && y != null&& x.StudentId == y.StudentId && x.Score == y.Score;
}
public int GetHashCode(Student obj)
{
int hashStudentId =obj.StudentId.GetHashCode();
int hashScore =obj.Score.GetHashCode();
return hashStudentId ^ hashScore;
}
}
}
代码说明
先使用Intersect方法生成两份记录的交集,该方法会使用传入的比较器对值进行比较决定记录是否相同。基于前步生成的交集,再使用Except方法找出两份记录中不一致的记录,该方法同样使用传入的比较器对值进行比较决定记录是否相同。
执行结果


猜你喜欢
- 什么是JavaMemoryModel(JMM)?JMM通过构建一个统一的内存模型来屏蔽掉不同硬件平台和不同操作系统之间的差异,让Java开发
- 1 支持文件类型.txt.html.htm.xml.bytes.json.csv.yaml.fnt2 寻找文件1 //Load textur
- 首先当我们将Dwr3配置好以后,我们可以在浏览器中测试一下,查看一下我们配置的Dwr有没有生效,方法是http://localhost:[你
- 在Windows平台上,播放PCM声音使用的API通常有如下两种。waveOut and waveIn:传统的音频MMEAPI,也是使用的最
- Ionic是一款流行的移动端开发框架,但是刚入门的同学会发现,Ionic在iOS和Android的底部tabs显示不一样。在安卓情况下底部t
- 数值类型之间的转换6个实心箭头箭头表示无信息丢失的转换;3个虚箭头表示可能有精度损失的转换.当使用上面两个数值进行二元操作时,先要将两个操作
- 简单的实现了一个树的结构,很不完善!后续参考一些其他代码的实现。试图实现叶子存在可变的节点,能够用来解析xml文件。叶子的代码:packag
- Tomcat 如何实现WebSocketWebSocket协议属于HTML5标准,越来越多浏览器已经原生支持WebSocket,它能让客户端
- 方法一:Convert.ToDateTime(string)string格式有要求,必须是yyyy-MM-dd hh:mm:ss方法二:Co
- 很多Android手机上都配有LED灯,比如HTC的手机在充电、新来短信等时候都会有响应的指示,其实很简单的这都是NotificationM
- 引言依照领导要求区分了两种压测模式:固定次数压测和固定时间压测。此前一直沿用的都是固定次数,所以本次第二版剥离了固定次数的模式增加了固定时间
- 一、问题描述平时我们在完成某些数据的入库后,发布了一个事件,此时使用的是@EventListener,然后在这个事件中,又去对刚才入库的数据
- 在日常开发中我们经常会使用到行情数据,很多的时候我们根据一个基准数据区构造行情,但是随着时间的推移然来构造的数据与真实行情数据之间的差距越来
- 在Java的学习中,涉及到两个系统环境变量path和classpath一. path环境变量path环境变量是系统环境变量的一种,它用于保存
- class MyThreadScopeData { // 单例 &nbs
- 方法一:递归算法/// <summary>/// 一列数的规则如下: 1、1、2、3、5、8、13、21、34求第30位数是多少
- 项目里使用了Feign进行远程调用,有时为了问题排查,需要开启请求和响应日志下面简介一下如何开启Feign日志:注:本文基于spring-b
- 子类重新实现父类的方法称重写;重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改;仅当返回值为类类型时,重写的方法才可
- 引言 基于生成图片实现了一个手机号转图片的需求。 内容也很简单,直接
- 一、简介:开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的