吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2781|回复: 10
收起左侧

[其他转载] C# Linq 交集、并集、差集、去重

  [复制链接]
迷恋自留地 发表于 2021-12-16 16:28

C# Linq 交集、并集、差集、去重

今晚打老虎:如果你刻意练习某件事情请超过10000小时,那么你就会达到世界级别

其实只要明白 LINQ查询操作符的Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefault、Reverse、SelectMany,Aggregate()的使用,一些简单的操作就可以了。
合并两个数组,并去掉重复元素,然后排序(C#)

List<int> numbers1 = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
List<int> numbers2 = new List<int>() { 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);

在这简单的介绍几个关键字,Distinct、Union、Concat、Intersect、Except、Skip、Take

Distinct - 过滤集合中的相同项;
List<int> list= new List<int>() {1,2,3,4,4,5,6,6 };
var newlist=list.Distinct();

得到的结果就是;1,2,3,4,5,6

Union - 连接不同集合,自动过滤相同项
List<int> list= new List<int>() {1,2,3,4,4,5,6,6 };
List<int> list1= new List<int>() {5,6,6,7,8,9};
var newlist=list.Union (list1);

得到的结果就是;1,2,3,4,5,6,7,8,9

Concat- 连接不同集合,不会自动过滤相同项
List<int> list= new List<int>() {1,2,3,4,4,5,6,6 };
List<int> list1= new List<int>() {5,6,6,7,8,9};
var newlist=list.Union (list1);

得到的结果就是;1,2,3,4,4,5,6,6,5,6,6,7,8,9

Intersect - 获取不同集合的相同项(交集)
List<int> list= new List<int>() {1,2,3,4,4,5,6,6 };
List<int> list1= new List<int>() {5,6,6,7,8,9};
var newlist=list.Intersect (list1);

得到的结果就是;5,6

Except - 从某集合中删除其与另一个集合中相同的项;其实这个说简单点就是某集合中独有的元素
List<int> list= new List<int>() {1,2,3,4,4,5,6,6 };
List<int> list1= new List<int>() {5,6,6,7,8,9};
var newlist=list.Except (list1);

得到的结果就是;1,2,3,4

Skip - 跳过集合的前n个元素
List<int> list= new List<int>() {1,2,3,4,4,5,6,6 };
var newlist=list.Skip (3);

得到的结果就是;4,4,5,6,6

Take - 获取集合的前n个元素
List<int> list= new List<int>() {1,2,2,3,4,4,5,6,6 };
var newlist=list.Take (3);
分页

Skip()和Take()方法都是IEnumerable 接口的扩展方法,包括C#中的所有Collections类,如ArrayList,Queue,Stack等等,还有数组和字符串都可以调用这两个方法。

var testList = new List();
//比如 testList里面是 1,2,3,4,5,6,7,8,9,10
var result = testList.Skip(5); //返回值就是 6,7,8,9,10;
var result = testList.Take(5); //返回值就是 1,2,3,4,5
//搭配使用,一般用来分页
var result = list.Skip(2).Take(2); //返回值 3,4

更多

https://blog.csdn.net/qq_40732336/article/details/111684724
官网:https://docs.microsoft.com/zh-cn/dotnet/api/system.linq.queryable.union?view=net-6.0
参考:https://www.cnblogs.com/lgx5/p/10614033.html

免费评分

参与人数 6吾爱币 +5 热心值 +5 收起 理由
zhhmok + 1 谢谢@Thanks!
Soul_Robot + 1 谢谢@Thanks!
おうせつげん + 1 + 1 谢谢@Thanks!
blindcat + 1 + 1 谢谢@Thanks!
与影立黄昏 + 1 + 1 热心回复!
xiaovssha + 1 + 1 C#同行

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ps122 发表于 2021-12-16 19:32
谢谢分享。
Concat处的代码用了Union。
qinling072 发表于 2021-12-16 16:40
Xiwen1025 发表于 2021-12-16 17:03
xiaovssha 发表于 2021-12-16 17:33
C#同行
ToBeNo1 发表于 2021-12-16 18:16
优秀的C#语言,.NET6多吸引些开发者就完美了
menggg 发表于 2021-12-16 19:42
学习了,感谢楼主分享
独孤唐 发表于 2021-12-17 18:24
Concat- 连接不同集合,不会自动过滤相同项示例中用的是Union方法
list.Union
mxmmc 发表于 2021-12-30 00:01
来学习一下,谢谢分享
zm55555 发表于 2021-12-30 08:55
学习了,谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 19:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表