C# Linq获取两个List或数组的差集交集

List<int> list1 = new List<int>(); list1.Add(1); list1.Add(2); list1.Add(3); List<int> list2 = new List<int>(); list2.Add(3); list2.Add(4); list2.Add(5); //得到的结果是4,5 即减去了相同的元素。 List<int> list3 = list2.Except(list1).ToList(); foreach (int i in list3) {     MessageBox.Show(i.ToString()); }

合并两个数组,并去掉重复元素,然后排序(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);

合并两个数组,并去除合并后的重复数据, 并排序

int[] A={1,2,2,3,4,5,6,6,6};             int[] B={2,2,2,3,7,8,9,5};

List<int> list = new List<int>(A);             list.AddRange(B);

list.Sort();

//去除重复项             foreach (int i in list.Distinct<int>())             {                 Console.WriteLine(i);             }

C# 取两个数组的相同元素

以往我们都是肯定绞尽脑汁,肯定什么循环,元素大小,什么因素都考虑进去。但是现在采用Linq可以很好的解决这个问题。找出两个或多个数组的相同项。

代码相当简单:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespaceTest4_03

{

classProgram

{

staticvoidMain(string[] args)

{

string[] names = {"Adams","Arthur","Buchanan","Tsbuchis","ShCian","FuchsiaLinda","DecheChen","Lotheer","FindLanciCade","SorchLand","JiangZheng","MisiiLoda","Gtod","Dfac","Lama","BakCades","Losangle","ZheWQ","GehengDahaLothi","ToryLandey","DakaLothy","BthLanda","MenNorth","Fith","FoxMain","DontM","Saobba","Del","Sala","Ghero","BhthLaPhda"};

IEnumerable<string> skip = names.Skip(10);

IEnumerable<string> take = names.Take(11);

//取出两个序列中交集部分,按理论应该输出JiangZheng

IEnumerable<string> intersect = skip.Intersect(take);

foreach(varsinintersect)

{

Console.WriteLine(s);

}

Console.ReadKey();

}

}

}

C# 获取两个数组集合的差集,交集

今天在做一个树形选择节点时,遇到一个问题,属性节点是记录了相关的ID值,第一次呢全部对这些ID进行处理,但是接下来再次选择就要分情况了,原先选择的ID如果不在新选择的集合中那么剔除掉,否则,原先ID不传入函数处理,新ID传入函数处理:

比如原来①选择的ID是:1,2,3,4                下次:1,2,3,4,5,   那么这时候5要处理,1,2,3,4维持原样。

②选择ID是:1,3                          下次: 3,4,5           那么这时候4,5 要处理,3 维持原样。1剔除。

③选择ID是:1,2,3,4,5                  下次:3,4,5             那么这时候3,4,5都维持原样,1,2剔除。

④选择ID是:1,2                           下次:3,4,5             那么这时候3,4,5处理,1,2剔除。

简化一下数学模型:

大家发现没其实这就是一个数学的概念,集合的差集,那么我们怎么处理呢? 假设前次选择的集合为A,后次选择为B

得到要处理的很简单:B-A (B与A的差集)就是要处理的集合元素,为什么呢?根据概念可知哈!

那么得到不做处理的怎么办呢? 不要处理的必然是B的子集,那么怎么得到呢?

出来啦既是:B-(B-A)    这是为什么呢? B-A  就是要处理的,而维持原样的就是当然就是:B-(B-A),

那么剔除的集合呢? A-(B-(B-A))

如何用C#表示呢,我这里就不用什么循环之类的了,我用的是NET3.5 那就好办了,用Linq处理:

俺这里特殊点,右键得到的树形集合(lstSource)包含了其他信息,先获取ID集合再说:

var m_ilAllSelect = lstSource.Select(r => r.ID).AsEnumerable();//新选择的列表

///////下面开始处理了

List<int> m_ilNewSelect = m_ilAllSelect.ToList();//新选择列表 List<int> m_ilExcept = m_ilNewSelect.Except(m_mcuids).ToList(); //两者的不同之处 List<int> m_iExceptAfterAndNew = m_ilNewSelect.Except(m_ilExcept).ToList();//新选择列表与差集比较,则是新选择中的旧的

为了简化给大家,这里的A代表旧集合,B代表新集合,这里的集合都是List<int>泛型列表。

那么要处理的就是 B.Except(A), 维持原样的:B( B.Except(A)), 剔除的:A.Except(B( B.Except(A))),

不要问我这个Except方法啥意思?看MSDN吧,google也行啦!

时间: 2024-10-10 22:59:32

C# Linq获取两个List或数组的差集交集的相关文章

LINQ获取两个List的交集

1.调用: UserList = UserList.ToList().Intersect(userIDList, new MyUserComparer()).AsQueryable(); 2.须要重写的方法: public class MyUserComparer : IEqualityComparer<MyUser> { public bool Equals(MyUser x, MyUser y) { //throw new NotImplementedException(); return

Javascript 获取两个数组交集(重复)的项列表,支持List&lt;object&gt;

(function( window ){ var Utils = { //TODO 判断两个JSON是否相等 equals : function( param ,param2){ return JSON.stringify(param) === JSON.stringify(param2); }, //TODO 获取当前项在数组出现的个数 getCountByItem : function( objects,item){ var count = 0; for(var i = 0;i < obje

javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除splice(需明确位置) 9.数组遍历 10.jQuery根据元素值删除数组元素的方法 数组常见操作包含了 增.删.查.改.插入.交集.并集 1.数组整体元素修改 //map,给数组每个元素加1 输出[1,2,3] $.map([0,1,2],function(n){ return n+1; })

获取两个数组相同元素,不同元素,及相同元素不同元素新数组

废话不多说直接上代码! /** * 获取两个数组相同元素 * @param a * @param b * @return */ public static <T> Set<T> getIds(T[] a, T[] b){ Set<T> same = new HashSet<T>(); //用来存放两个数组中相同的元素 Set<T> temp = new HashSet<T>(); //用来存放数组a中的元素 for (int i =

使用LINQ获取List列表中的某个字段值

使用LINQ获取列表中的某个字段值,下面以获取员工列表中的编号字段为例子. 1.使用Select方法 1 List<Emplayee> emplayeeList = GetEmplayeeList(); //获取员工信息列表 2 int[] empIds = emplayeeList.Select(a => a.Id).ToArray(); //获取员工编号数组 2.使用ForEach方法 1 List<Emplayee> emplayeeList = GetEmplayee

in查询和两个二维数组的拼接

1.当某个教练查看自己学员的时候,可以通过获取学员身份证号,然后在怎么通过不同的身份证号获取学员的登录名(可用视图实现,userinfo表和studentinfo表进行拼接) 解决: functionarrTostr ($arr)//把二维数组转化为字符串 { foreach ($arr as $v) { $v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $t=""; foreach($

php 求两个数组的差集应该注意的事情

对于 phper 来说 array_diff 这个函数应该知道它的用途,获取两个数组的差集,我理解中的差集是这样的 但是执行下代码会发现结果并不是 <?php $a = [1,2,3,4,5]; $b = [3,4,5,6,7]; $c = array_diff($a,$b); print_r($c); //输出 Array ( [0] => 1 [1] => 2 ) 我开始以为应该是会输出数组  [1,2,6,7] 才对的但是实际结果却不是,于是去翻下文档: 如图人家说的已经很清楚啦,

获取两个字符串中最长相等的字符串

获取两个字符串中最长相等的字符串 例:"likeyou"和"loveyou" 输出"eyou" 前段时间面试遇到的面试题,当时的想法是首先将字符串拆分成字符数组,然后拿两个数组去做比较,可惜由于基础不是很扎实,当时的for循环比较写成了这个样子 for (int i = 0; i < arrStr1.length; i++) { for (int j = 0; j < arrStr2.length; j++) { if (arrStr

获取两个字符串中最大相同子串

2.获取两个字符串中最大相同子串.第一个动作:将短的那个串进行长度一次递减的子串打印. "cvhellobnmtanop" "andefc" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到! package tan; class Test { public static String getMaxSubString(String s1,String s2) { String max = "