C# Linq 交集、并集、差集、去重
2021-04-07 00:27
标签:删除 sel except ogr 另一个 one while word bin 其实只要明白 LINQ查询操作符的 Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefault、Reverse、SelectMany,Aggregate()(这个挺偏的,具体意思有空再写,可以百度一下) 的使用,一些简单的操作就可以了。
合并两个数组,并去掉重复元素,然后排序(C#) Listint> numbers1 = new Listint>() { 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
Listint> numbers2 = new Listint>() { 15, 14, 11, 13, 19, 18, 16, 17, 12, 10 };
var newQuerty = numbers1.Concat(
from n in numbers2
where !numbers1.Contains(n)
select n
).OrderBy(n => n);
string count = "";
foreach (int i in newQuerty)
{
count += i + ",";
}
MessageBox.Show(count);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
在这简单的介绍几个关键字,Distinct、Union、Concat、Intersect、Except、Skip、Take
Distinct - 过滤集合中的相同项;
Listlist= new List() {1,2,3,4,4,5,6,6 };
var newlist=list.Distinct();
- 1
- 2
得到的结果就是;1,2,3,4,5,6
Union - 连接不同集合,自动过滤相同项
Listlist= new List() {1,2,3,4,4,5,6,6 };
List list1= new List() {5,6,6,7,8,9};
var newlist=list.Union (list1);
- 1
- 2
- 3
得到的结果就是;1,2,3,4,5,6,7,8,9
Concat - 连接不同集合,不会自动过滤相同项;
Listlist= new List() {1,2,3,4,4,5,6,6 };
List list1= new List() {5,6,6,7,8,9};
var newlist=list.Union (list1);
- 1
- 2
- 3
得到的结果就是;1,2,3,4,4,5,6,6,5,6,6,7,8,9
Intersect - 获取不同集合的相同项(交集);
Listlist= new List() {1,2,3,4,4,5,6,6 };
List list1= new List() {5,6,6,7,8,9};
var newlist=list.Intersect (list1);
- 1
- 2
- 3
得到的结果就是;5,6
Except - 从某集合中删除其与另一个集合中相同的项;其实这个说简单点就是某集合中独有的元素
Listlist= new List() {1,2,3,4,4,5,6,6 };
List list1= new List() {5,6,6,7,8,9};
var newlist=list.Except (list1);
- 1
- 2
- 3
得到的结果就是;1,2,3,4
Skip - 跳过集合的前n个元素;
List> list= new List>() {1,2,3,4,4,5,6,6 };
var newlist=list.Skip (3);
- 1
- 2
得到的结果就是;4,4,5,6,6
Take - 获取集合的前n个元素;延迟
List> list= new List>() {1,2,2,3,4,4,5,6,6 };
var newlist=list.Take (3);
- 1
- 2
得到的结果就是;1,2,2
Liststring> ListA = new Liststring>();
Liststring> ListB = new Liststring>();
Liststring> ListResult = new Liststring>();
ListResult = ListA.Distinct().ToList();//去重
ListResult = ListA.Except(ListB).ToList();//差集
ListResult= ListA.Union(ListB).ToList(); //并集
ListResult = ListA.Intersect(ListB).ToList();//交集
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
重写比较方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace test
{
class Program
{
static void Main(string[] args)
{
IList oneStudents = new List();
oneStudents.Add(new Student(1,false,"小新1","徐汇"));
oneStudents.Add(new Student(2,false,"小新2","闵行"));
oneStudents.Add(new Student(3, false, "小新3", "嘉定"));
oneStudents.Add(new Student(4, false, "小新4", "闸北"));
IList twoStudents = new List();
twoStudents.Add(new Student(5, false, "小新5", "贵州"));
twoStudents.Add(new Student(6, false, "小新6", "湖北"));
twoStudents.Add(new Student(7, false, "小新7", "山东"));
twoStudents.Add(new Student(8, false, "小新8", "西藏"));
IList threeStudents = new List();
threeStudents.Add(new Student(1, false, "小新1", "徐汇"));
threeStudents.Add(new Student(2, false, "小新2", "闵行"));
var bingji = oneStudents.Union(twoStudents, new StudentListEquality()).ToList();//并(全)集
var jiaoji = oneStudents.Intersect(threeStudents, new StudentListEquality()).ToList();//交集
var chaji = oneStudents.Except(threeStudents, new StudentListEquality()).ToList();//差集
Console.WriteLine();
Console.WriteLine("以下是并集的结果");
bingji.ForEach(x =>
{
Console.WriteLine(x.StudentId.ToString() + " " + x.Sex.ToString() + " " + x.Name.ToString()+" "+x.Address.ToString());
});
Console.WriteLine();
Console.WriteLine("以下是交集的结果");
jiaoji.ForEach(x =>
{
Console.WriteLine(x.StudentId.ToString() + " " + x.Sex.ToString() + " " + x.Name.ToString() + " " + x.Address.ToString());
});
Console.WriteLine();
Console.WriteLine("以下是差集的结果");
chaji.ForEach(x =>
{
Console.WriteLine(x.StudentId.ToString() + " " + x.Sex.ToString() + " " + x.Name.ToString() + " " + x.Address.ToString());
});
}
}
public class Student
{
public Student(int studentId, bool sex, String name, String address)
{
this.StudentId = studentId;
this.Sex = sex;
this.Name = name;
this.Address = address;
}
public int StudentId { get; set; }
public bool Sex { get; set; }
public String Name { get; set; }
public String Address { get; set; }
}
public class StudentListEquality : IEqualityComparer
{
public bool Equals(Student x, Student y)
{
return x.StudentId == y.StudentId;
}
public int GetHashCode(Student obj)
{
if (obj == null)
{
return 0;
}
else
{
return obj.ToString().GetHashCode();
}
}
}
}
C# Linq 交集、并集、差集、去重
标签:删除 sel except ogr 另一个 one while word bin
原文地址:https://www.cnblogs.com/Fooo/p/9121313.html
文章标题:C# Linq 交集、并集、差集、去重
文章链接:http://soscw.com/index.php/essay/72198.html