首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 判斷集合是否為子集的簡潔 LINQ 寫法

     編輯:關於C語言

在 C# 開發中,常需要判斷一個集合是否為另一個集合的子集。雖然可以用迴圈逐一比對,但使用 LINQ 內建方法能讓程式碼更簡潔、可讀性更高。

基本子集判斷:使用 Except 與 Any

若要確認 smallArr 的所有元素都包含在 bigArr 中(即嚴格子集,元素數量較少),可利用差集運算:

string[] bigArr = { "a", "b", "c" };
string[] smallArr = { "a", "b" };

// 取大集合扣除小集合後的差集
var exceptArr = bigArr.Except(smallArr);

// 若差集有元素,表示 smallArr 不是 bigArr 的子集
// 反之,差集為空則代表 smallArr 所有元素皆在 bigArr 中
bool isSubset = !exceptArr.Any();

Console.WriteLine(isSubset ? "smallArr 是 bigArr 的子集" : "smallArr 不是 bigArr 的子集");

邏輯:bigArr.Except(smallArr) 回傳存在於 bigArr 但不在 smallArr 的元素。若結果為空序列(!Any()),表示 smallArr 涵蓋了 bigArr 的所有元素,故為子集。

允許相等的子集判斷:使用 All 與 Any

若需求放寬為「smallArr 為 bigArr 的子集,或兩者完全相同」,可改用:

bool isSubsetOrEqual = smallArr.All(item => bigArr.Contains(item));
// 或寫法:
// bool isSubsetOrEqual = smallArr.All(t => bigArr.Any(b => b == t));

Console.WriteLine(isSubsetOrEqual ? "smallArr 是 bigArr 的子集或相同" : "smallArr 不是 bigArr 的子集或相同");

All 確保 smallArr 每個元素都能在 bigArr 找到對應項目,不限制兩者長度關係。

效能提示

  • 若集合較大且頻繁查詢,建議將 bigArr 轉為 HashSet<T>,Contains 操作可達 O(1) 複雜度。
  • Except 內部已使用集合運算,效能亦佳。

總結

情境推薦寫法關鍵點
嚴格子集(長度較小)!bigArr.Except(smallArr).Any()差集為空即為子集
子集或相等smallArr.All(bigArr.Contains)逐一確認元素存在性

善用 LINQ 讓集合判斷邏輯一目瞭然,減少手寫迴圈的錯誤機率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved