C#提供了許多預設class可以用來儲存資料,其中一個就是array陣列 陣列可以用來儲存多組資料。 在應用於文章、使用者資料、權限管理等介面時,可以先將值儲存成陣列,再透過迴圈的方式一個一個取出來。(迴圈的用法將會在後續提到)

在這裡,會用比較簡潔易懂的方式來解說, 建議可以先從本篇理解陣列用法,再前往官網參考手冊參考更仔細的寫法

一維陣列

在C#中的陣列,是用資料型別+大刮號[]來宣告,並且可在括號中填寫陣列size 範例:

//新增陣列 address,並在大括號設定可容納五個元素
int[5] address;

//指定陣列userid,但不限定容量
int[] userid;

在資料結構方面,仍繼承了C語言的寫法,會從0開始累算 也就是第一筆資料,會存放在 userid[0] 範例:

int[3] userid;
userid[0] = 100334;
userid[1] = 100342;
userid[2] = 100321;

在C#還提供另外一種比較便利的寫法,讓我們可以很輕鬆的定義陣列內容

string[] formdata = {"年齡","性別","身高","體重","備註"};

Console.WriteLine(formdata[3]);   //結果: 體重   

二維陣列

如果在一維陣列要再新增第二維,只要加一個逗號(,)表示之 當然,也可以在新增時定義各維度的size type[,,…] array名稱 = new type[size1, size2, size3…] 例如: int[,] x= new int[4,3]; 建立一個二維、 4x3的array 等同: int[,] x={ {2, 3, 2}, {5, 6, 1}, {4, 6, 2}, {4, 6, 3} };

ing[,] formdata 取出資料也是依照相同的模式 (注意!這樣的寫法,要留意資料結構必須對稱) 例如,取出第一維[0]第二維[1] 位置的值 formdata[0,1] (注意!不是用formdata[0][1])

範例:

int[,] formdata = {
    {1,2},
    {3,4},
    {5,6},
    {7,9}
};
Console.WriteLine(formdata[0, 1]);//結果: 2

三維陣列

如果在二維陣列要再新增第三維,只要加兩個逗號(,,)表示之(以此類推…) (注意!這樣的寫法,要留意資料結構必須對稱)

string[,,] user 接下來,取出資料同樣依照相同方式 例如,取出第一維[1] 第二維[0] 第三維[1] 的資料 user[1, 0, 1] 範例

string[,,] user = {
    {
        {"a1","b1"},
        {"c1","d1"},
        {"e1","f1"},
        {"g1","h1"}
    },
    {
        {"a2","b2"},
        {"c2","d2"},
        {"e2","f2"},
        {"g2","h2"}
    }
};

Console.WriteLine(user[1, 0, 1]);//結果:b2

不規則(不對稱)陣列 (Jagged Arrays)

前面提到的多維陣列寫法,內容架構必須對稱 例如:

int[,] formdata = {
    {1,1},
    {1,1},
    {1,1}
};

如果需要跳脫這樣的規則,就可以使用不規則陣列 Jagged Arrays Jagged Arrays 的主要差別在於: 他陣列中的元素也是array (陣列中的陣列) 定義方式如下: int[][] numbers 定義完成之後,指派內容時,要在new一次陣列,這時就可以在新的陣列中存取任意長度值

int[][] numbers = {
    new int[] { 1, 2 },
    new int[] { 3, 4, 5, 6, 7, 8, 9 },
    new int[] { 10,11 }
};
Console.WriteLine(numbers[1][2]);//結果:5

當然,你可以混和這兩種方式來建構陣列, 但通常不建議這麼做,除非真的沒有其他辦法 範例:

int[][,] numbers = {
    new int[,] { { 1, 2 },{ 3, 4 }},
    new int[,] { { 5, 6 }, { 7, 8 }, { 9, 10 }, { 11, 12 }, { 13, 14 }},
    new int[,] { { 15, 16 }, { 17, 18 }, { 19, 20 } }
};
Console.WriteLine(numbers[1][3,0]);

##陣列屬性

Array.Length 取得陣列資料長度

在程式開發時,時常會需要取得陣列長度 可以直接使用 .Length 方法來取得 範例:

int[] num = { 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine(num.Length);

Array.Rank 取得陣列維度值

藉由Rank可以返回陣列的維度值,例如: 四維陣列,就會返回 4 範例:

int[,,,] dim = new int[2,5,3,7];
Console.WriteLine(dim.Rank);//結果 4

int[] num = { {{ 5, 6 }, { 7, 8 }},{{ 5, 6 }, { 7, 8 }},{{ 5, 6 }, { 7, 8 }} };
Console.WriteLine(num.Rank);//結果 3

Array.Max, Array.Min, Array.Sum

藉由Max可以取得陣列的最大值、Min可以取得陣列的最小值、Sum可以取得總和 範例:

int[ ] ary = { 3, 5, 6, 2};
Console.WriteLine(ary.Max());
//Outputs 6

Console.WriteLine(ary.Min());
//Outputs 2

Console.WriteLine(ary.Sum());
//Outputs 16

進階用法

底下記錄一些常會用到的技巧 將持續更新

(如果對於陣列資料有更多的操作,例如新增、刪除..,建議使用List來處理)

Array.Sort 排序

藉由Sort來對陣列內容排序,可接受數值、字串排序

string[] datas = { "About", "Name", "One", "All" };
Array.Sort(datas);
foreach(var i in datas)
{
    Console.WriteLine(i);
}

將陣列內容轉換成小寫

透過ConvertAll 處理所有值,並且在返回的過程一一轉換成小寫

string[] datas = { "About", "Name", "One" };
var lowerTreat = Array.ConvertAll(datas, (v) => { return v.ToLower(); });
Console.WriteLine(lowerTreat[1]);

搜尋

搜尋陣列內容 藉由FindAll 並且在返回過程檢查字首為A的字串

string[] datas = { "About", "Name", "One", "All" };
var searchData = Array.FindAll(datas, (v) => { return v.StartsWith("A"); });
foreach(var i in searchData)
{
    Console.WriteLine(i);
}