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);
}