[LINQ] 使用 Enumerable 類別(LINQ to Object)處理陣列、集合

[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, "過濾重覆項目");
image 

合併兩個陣列-Concat


QueryData(data, "合併兩個陣列");

image

合併兩個陣列並去除重覆項目-Union


QueryData(data, "合併兩個陣列並去除重覆項目");

image

找出兩陣列相同的項目-Intersect


QueryData(data, "找出兩陣列相同的項目");

image

找出兩陣列不相同的項目-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();
}

image

將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();

image

將列列組合成字串-Aggregate


string v = list.Aggregate((s1,s2)=>string.Format("{0}、{1}",s1,s2));
Console.WriteLine(v);
Console.ReadLine();
image 

陣列中的數值累加-Aggregate


int[] iArr = new int[] { 1, 2, 3, 4, 5 };
int iResult = iArr.Aggregate((i1, i2) => i1 + i2);
Console.WriteLine(iResult);
Console.ReadLine();
image 

陣列和-Sum


iResult = iArr.Sum();
Console.WriteLine(iResult);
Console.ReadLine();

image

陣列最大值-Max


iResult = iArr.Max();
Console.WriteLine(iResult);
Console.ReadLine();

image

陣列最小值-Min


iResult = iArr.Min();
Console.WriteLine(iResult);
Console.ReadLine();

image

陣列平均值-Average


var result = iArr.Average();
Console.WriteLine(result);
Console.ReadLine();

image

 

範例下載

CS_LinqToObject.zip

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo