嗨嗨~我們又見面啦
今天我們要講講陣列
程式中一個變數只能存放一個資料,當程式中需使用大量同性質資料時,就得為變數命名傷腦筋了。如:50筆商品價格,就必須使用50個不同的變數名稱。如此不但增加了程式的複雜度跟命名的困擾,還提高維護跟偵錯的困難度,所以我們就要使用陣列來解決問題。
什麼是陣列呢?
陣列(Array)是由多個相同資料型別的變數在記憶體中前後連續串在一起。程式中使用陣列時機是在需要處理多個同性質資料的時候,以陣列中的陣列元素來取代同性質的變數,即將每個陣列元素視為一個變數。陣列元素是由陣列名稱其後跟著中括號括住陣列的註標值或稱索引值組成,表示該陣列元素在此陣列中是第幾個資料,陣列的索引值是從0開始計算第幾個資料,比如 a[0]是a陣列的第一筆、a[1]是第二筆,以此類推。
那我們要怎麼創建陣列呢?非常簡單,如下
1.宣告陣列語法:
資料型別[] 陣列名稱;
2.創建陣列語法:
陣列名稱 = new 資料型別[陣列大小];
當然也可以一行解決
資料型別[] 陣列名稱 = new 資料型別[陣列大小];
上面宣告陣列在名稱後面只跟著一個註標屬於一維陣列。若跟著兩個註標屬於二維陣列,以此類推。C#最多允許使用32維陣列。每一維的註標是由0開始算起,維度間用逗號隔開。
陣列在使用之前必須宣告,給予該陣列名稱、資料型態、陣列大小,接下來使用new關鍵字建立陣列的物件實體。C#陣列語法如下:
1.一維陣列: 資料型態[] 陣列名稱 = new 資料型態[陣列大小];
2.二維陣列: 資料型態[,] 陣列名稱 = new 資料型態[第一維陣列大小,第二維陣列大小];
陣列經過宣告和建立該物件的實體後,需給予陣列元素初值,才能存取陣列。由於陣列元素相當於個變素,因此可用=指定運算子直接指定每個陣列元素的值,如:
int[] score = new int[4];
score[0] = 40; score[1] = 50; score[2] = 60; score[3] = 70;
當然也可以合併在一起
#資料型態[]陣列名稱=new 資料型態[]{陣列初值串列};
int[] a = new int[]{1, 2, 3, 4, 5};
再來是陣列裡面常用的屬性和方法
在System.Array類別中提供了建立、管理、搜尋和排序陣列的屬性和方法。假設建立下列a1一維陣列與a2二維陣列來說明下表陣列屬性與方法的使用
int[] a1 = new int[3];
int[,] a2 = new int[3,4];
陣列物件的成員 | 功能 |
---|---|
Length屬性 | 取得指定陣列內的所有陣列元素的總數,傳回值為整數。例如: (1)a1.Length =>傳回3 (2)a2.Length => 傳回12 |
Rank屬性 | 取得指定陣列維度的數目,傳回值整數。例如: (1)a1.Rank =>傳回1 (2)a2.Rank => 傳回2 |
IsReadOnly屬性 | 傳回指定陣列是否為唯獨,傳回值為布林值。例如: a1.IsReadOnly => 傳回false |
GetUpperBound屬性 | 取得指定陣列中某一維度上限,傳回值維整數。例如: (1) a1.GetUpperBound(0) => 取a1第1維上限,傳回2 (2) a2.GetUpperBound(1) => 取a2第1維上限,傳回3 |
GetLowerBound屬性 | 取得指定陣列中某一維度下限,傳回值維整數。陣列維度的下限是由0開始 |
GetLength屬性 | 取得指定陣列中某一維度的陣列元素總數,傳回值維整數。例如: (1) a1.GetLength(0) => 取a1第1維陣列元素總數,傳回3 (2) a2.GetLength(1) => 取a2第1維陣列元素總數,傳回4 |
CreateInstance屬性 | 建立指定陣列資料型態和大小的一維陣列(具有以零起始的索引)。 (1) 產生一個含有五個陣列元素的a1整數陣列 Array a1 = Array.CreateInstance(typeof(Int32),5); (2) 產生一個名稱為a2的2*3字串二維陣列 Array a2 = Array.CreateInstance(typeof(String),2,3); |
SetValue屬性 | 設定一維、二維...陣列中陣列元素的值。 (1)設定一維陣列第3個陣列元素的值為10 a1.SetValue(10,2); (1)設定二維陣列第1列第2欄陣列元素的值為10 a2.SetValue(10,0,1); |
GetValue屬性 | 取得一維、二維...陣列中位於指定位置的值。 (1)取得一維陣列第3個陣列元素的值 a1.GetValue(2); (1)取得二維陣列第1列第2欄陣列元素的值 a2.GetValue(0,1); |
今天的陣列就先到這邊結束啦~~~掰掰~