[LINQ] 使用 Enumerable 類別(LINQ to Object)處理陣列、集合
Enumerable 類別 提供了許多的靜態方法供我們處理 IEnumerable 介面集合,方法相當的多,若有需要可上MSDN找尋適合自己的方法。
比如現在我們有兩個集合,一個是Array一個是List<>,我們將針對兩個集合來進行一些資料處理動作,以往需要耗費很多演算法功能,Enumerable 類別已經幫我們處理完成,節省掉我們開發的時間了。
命名空間: System.Linq
組件: System.Core (在 System.Core.dll 中)
ArrayList list = new List<string>();
list.Add("余小章");
list.Add("kobe");
list.Add("靂");
list.Add("霹");
list.Add("gy");
list.Add("王小明");
list.Add("盧小小");
過濾重覆項目-Distinct
QueryData(data, "過濾重覆項目");
合併兩個陣列-Concat
QueryData(data, "合併兩個陣列");
合併兩個陣列並去除重覆項目-Union
QueryData(data, "合併兩個陣列並去除重覆項目");
找出兩陣列相同的項目-Intersect
QueryData(data, "找出兩陣列相同的項目");
找出兩陣列不相同的項目-Except,下列範例是由array比對list,並列出array所沒有的項目。
QueryData(data, "找出兩陣列不相同的項目");
{
string value = "";
foreach (var item in data)
{
if (value == "")
value += item;
else
value += "," + item;
}
Console.WriteLine(Description);
Console.WriteLine(value);
Console.ReadLine();
}
將ArrayList轉換成泛型-Cast
arr.Add("余小章");
arr.Add("kobe");
arr.Add("靂");
arr.Add("霹");
arr.Add("gy");
arr.Add("王小明");
arr.Add("盧小小");
data = arr.Cast<string>();//轉成泛型集合
比較兩個陣列項目是否相同-SequenceEqual
Console.WriteLine("比對 list 與 data 是否相同: " + list.SequenceEqual(data));
Console.ReadLine();
將列列組合成字串-Aggregate
string v = list.Aggregate((s1,s2)=>string.Format("{0}、{1}",s1,s2));
Console.WriteLine(v);
Console.ReadLine();
陣列中的數值累加-Aggregate
int[] iArr = new int[] { 1, 2, 3, 4, 5 };
int iResult = iArr.Aggregate((i1, i2) => i1 + i2);
Console.WriteLine(iResult);
Console.ReadLine();
陣列和-Sum
iResult = iArr.Sum();
Console.WriteLine(iResult);
Console.ReadLine();
陣列最大值-Max
iResult = iArr.Max();
Console.WriteLine(iResult);
Console.ReadLine();
陣列最小值-Min
iResult = iArr.Min();
Console.WriteLine(iResult);
Console.ReadLine();
陣列平均值-Average
var result = iArr.Average();
Console.WriteLine(result);
Console.ReadLine();
範例下載
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET