C# Linq获取两个List或数组的差集交集
list1.Add(1);
list1.Add(2);
list1.Add(3);
List<int>?list2?=?new?List<int>();
list2.Add(3);
list2.Add(4);
list2.Add(5);
//得到的結(jié)果是4,5?即減去了相同的元素。
List<int>?list3?=?list2.Except(list1).ToList();
foreach?(int?i?in?list3)
{
????MessageBox.Show(i.ToString());
} 合并兩個(gè)數(shù)組,并去掉重復(fù)元素,然后排序(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); 合并兩個(gè)數(shù)組,并去除合并后的重復(fù)數(shù)據(jù), 并排序
? ? ? ? ? ? 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();
??????????? //去除重復(fù)項(xiàng)
??????????? foreach (int i in list.Distinct<int>())
??????????? {
??????????????? Console.WriteLine(i);
??????????? }
| 以往我們都是肯定絞盡腦汁,肯定什么循環(huán),元素大小,什么因素都考慮進(jìn)去。但是現(xiàn)在采用Linq可以很好的解決這個(gè)問題。找出兩個(gè)或多個(gè)數(shù)組的相同項(xiàng)。 代碼相當(dāng)簡(jiǎn)單: 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); ???????????//取出兩個(gè)序列中交集部分,按理論應(yīng)該輸出JiangZheng ???????????IEnumerable<string> intersect = skip.Intersect(take); ???????????foreach(varsinintersect) ????????????{ ???????????????Console.WriteLine(s); ????????????} ???????????Console.ReadKey(); ????????} ????} } |
?
C# 獲取兩個(gè)數(shù)組集合的差集,交集| 今天在做一個(gè)樹形選擇節(jié)點(diǎn)時(shí),遇到一個(gè)問題,屬性節(jié)點(diǎn)是記錄了相關(guān)的ID值,第一次呢全部對(duì)這些ID進(jìn)行處理,但是接下來再次選擇就要分情況了,原先選擇的ID如果不在新選擇的集合中那么剔除掉,否則,原先ID不傳入函數(shù)處理,新ID傳入函數(shù)處理: 比如原來①選擇的ID是:1,2,3,4??????????????? 下次:1,2,3,4,5,?? 那么這時(shí)候5要處理,1,2,3,4維持原樣。 ????????????? ②選擇ID是:1,3??????????????????????????下次: 3,4,5?????????? 那么這時(shí)候4,5 要處理,3 維持原樣。1剔除。 ??????????? ??③選擇ID是:1,2,3,4,5??????????????????下次:3,4,5???????????? 那么這時(shí)候3,4,5都維持原樣,1,2剔除。 ????????????? ④選擇ID是:1,2???????????????????????????下次:3,4,5???????????? 那么這時(shí)候3,4,5處理,1,2剔除。 ? 簡(jiǎn)化一下數(shù)學(xué)模型: 大家發(fā)現(xiàn)沒其實(shí)這就是一個(gè)數(shù)學(xué)的概念,集合的差集,那么我們?cè)趺刺幚砟?#xff1f; 假設(shè)前次選擇的集合為A,后次選擇為B 得到要處理的很簡(jiǎn)單:B-A (B與A的差集)就是要處理的集合元素,為什么呢?根據(jù)概念可知哈! 那么得到不做處理的怎么辦呢? 不要處理的必然是B的子集,那么怎么得到呢? 出來啦既是:B-(B-A)?? ?這是為什么呢? B-A? 就是要處理的,而維持原樣的就是當(dāng)然就是:B-(B-A), 那么剔除的集合呢? A-(B-(B-A))? ? 如何用C#表示呢,我這里就不用什么循環(huán)之類的了,我用的是NET3.5 那就好辦了,用Linq處理: 俺這里特殊點(diǎn),右鍵得到的樹形集合(lstSource)包含了其他信息,先獲取ID集合再說: ?var m_ilAllSelect = lstSource.Select(r => r.ID).AsEnumerable();//新選擇的列表 ///下面開始處理了 List<int> m_ilNewSelect = m_ilAllSelect.ToList();//新選擇列表 ? 為了簡(jiǎn)化給大家,這里的A代表舊集合,B代表新集合,這里的集合都是List<int>泛型列表。 那么要處理的就是 B.Except(A), 維持原樣的:B(?B.Except(A)), 剔除的:A.Except(B(?B.Except(A))), 不要問我這個(gè)Except方法啥意思?看MSDN吧,google也行啦! 當(dāng)然我實(shí)際的源碼比這更細(xì)致點(diǎn),至此解決集合的差集的知識(shí)點(diǎn)就這些了! |
轉(zhuǎn)載于:https://www.cnblogs.com/xiaofengfeng/p/3449985.html
總結(jié)
以上是生活随笔為你收集整理的C# Linq获取两个List或数组的差集交集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql 语句详解
- 下一篇: .NET(C#):浅谈程序集清单资源和R