如何使用 List<T> 泛型類別及 Linq 以交集方式來取得兩資料間相同的資料內容(一點通系列 - MVP 撰寫)

關於作者:

本文由微軟最有價值專家 MVP 謝銘恩 提供。微軟十分感謝 MVP 主動地將他們的經驗與上百萬名其他技術使用者交流。MVP 謝銘恩 同時也將此篇文章放在他的部落格內,歡迎您按 此處 瀏覽 MVP 謝銘恩 更多的技術文章、經驗分享與觀點。

問題的來龍去脈

通常要取得兩資料間是否有任何相同的值,或許都是要用到演算法等之類才能得到結果,但是今天先利用 List<T> 泛型類別把兩資料內容分別存入相對自訂的 List<T> 變數中,接著再把兩變數使用 Linq 中的 Intersect (交集) 方式來取得相同的值。如下圖所示:





上圖說明了現在有 A資料 與 B資料 ,然後取得 A資料 與 B資料 兩個資料中相同之值。

問題的發生原因

當有兩個資料內容欲進行比對,且取得兩資料中相同的值。

問題的解決方法

1. 開啟新增專案,並按下【Visual C#】,接者選取【主控台應用程式】,並命名為 ConsoleListIntersectMethod,最後按下【確定】按鈕。





2. 點選 Program.cs 檔案,進行編輯程式碼。





3. 在 Main(string[] args) 方法中撰寫如下的程式碼:


            //假定 A 資料中有 A1, B1, B2, B3, A3, A2 之值
//假定 B 資料中有 B1, C1, C2, C3, A1, A2, C4 之值
List<string> ASource = new List<string>();
List<string> BSource = new List<string>();

//首先先把 A 資料分別加入 ASource 變數中
//首先先把 B 資料分別加入 BSource 變數中
ASource.Add("A1");
ASource.Add("B1");
ASource.Add("B2");
ASource.Add("B3");
ASource.Add("A3");
ASource.Add("A2");

BSource.Add("B1");
BSource.Add("C1");
BSource.Add("C2");
BSource.Add("C3");
BSource.Add("A1");
BSource.Add("A2");
BSource.Add("C4");


// 列出 A 資料有 (即 ASource)
Console.WriteLine("A資料內部所含之值有 (即 ASource):");
foreach (string AString in ASource)
{
Console.Write(AString + ", ");
}
Console.WriteLine();
Console.WriteLine();

//列出 B 資料有 (即 BSource)
Console.WriteLine("B資料內部所含之值有 (即 BSource):");
foreach (string BString in BSource)
{
Console.Write(BString + ", ");
}
Console.WriteLine();
Console.WriteLine();

//以 ASource 為比較基底,找出 BSource 相同的值。此部份即為本程式之關鍵處
if (ASource.Intersect(BSource).Count() > 0) //透過Count()得知是否有相同值之筆數
{
Console.WriteLine("ASource 與 BSource 經比較後,相同的值有:");
foreach (var ABValue in ASource.Intersect(BSource))
{
Console.Write(ABValue.ToString() + ", "); //列印出相同值
}
}
else
{
Console.WriteLine("ASource 與 BSource 經比較後,沒有任何相同的值");
}

Console.ReadKey();



請讓我們知道

還滿意我們寫的內容嗎?無論您是遇到了以下任何一種情況:
「太好了!問題解決了。」
「問題沒有解決,我有更好的建議。」
都歡迎您利用本篇文章底部的意見調查表,寫下您寶貴的意見。也期待您的鼓勵,讓我們為您創造更多實用的技術文章。

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×