C# 陣列
陣列是用來儲存一組相同資料型態的資料的一個資料結構體,一個陣列的宣告是以資料型態加上空的中括弧( [ ] )來進行,陣列的索引值一律從零開始,陣列的第1個元素之索引值為0,陣列最後一個元素的索引位置為所有元素的數量減1。
C#,陣列大小可以是固定與動態二種型態,固定大小的陣列若以儲存事件定義好的元素數量,動態的陣列,其大小隨著使用加入新的元素而有所改變。C#的陣列宣告方式如下:
datatype [] arrayName;
其中,arraytype用來指定陣列裏的元素之資料型態為何, 中括弧 [ ] 指定陣列的維度,arrayName指定陣列的名字。
下面程式範例宣告了一個一組陣列array1,並且可以儲存4個int型態元素:
int [ ] array1;
array1 = new int[4];
陣列的初始化:
一旦陣列被初始了,使用者需要給定陣列元素初值,陣列初始化範例如下:
初始化一個固定大小的陣列:
第1種方式,宣告時,同時使用{ }對陣列的元素指定初始值:
int [ ] numArray = new int [4] {1, 3, 5, 7 };
第2種方式,宣告後,分別用敘述給定每個元素的初始值:
int [ ] numArray = new int [4];
numArray [0] = 1;
numArray [1] = 3;
numArray [2] = 5;
numArray [3] = 7;
存取陣列的元素
使用者可透過索引值來存取陣列中一個特定位置的元素,底下程式使用主控台模式來顯示陣列的元素:
int[ ] numArray = new int [4];
numArray [0] = 1;
numArray [1] = 3;
numArray [2] = 5;
numArray [3] = 7;
Console.WriteLine(numArray[0]);
Console.WriteLine(numArray[1]);
Console.WriteLine(numArray[2]);
Console.WriteLine(numArray[3]);
使用foreach迴圈敘述來走訪陣列每一個元素:
class Demo { static void Main ( string[ ] args ) { int [ ] numArray = new int [4]; for ( int i = 0; i<4; i++) { numArray [i] = i+1; } foreach ( int j in numArray ) { int i = j-1; Console.WriteLine(“Element [ {0} = {1}”, i, j ); i++; } Console.Read(); } }
上面程式的輸入結果如下:
C#陣列細部探討:
陣列有下列四種型態:
- 一維陣列
- 多維陣列
- 不規則陣列
- 4) 參數陣列
I. 一維陣列
一維陣列被用來儲存事先定義的資料型態項目,所有的陣列元素被儲存在連續的記憶體,其位置從0到陣列大小減1,一維陣列的宣告方式舉例如下:
II. 多維陣列
多維陣列有2維、3維、4維等的陣列型態,2維陣列用來儲存矩陣、2D座標等問題領域的值,3維陣列用來儲存3D座標、空間等問題領域的值。要宣告多維陣列在中括弧裏加上數量不等的逗號:
int [ , ] narray1; //2維陣列
int [ , ,] narray2; //3維陣列
…
多維陣列可以是固定或變動大小,一個2×2整數矩陣的宣告程式範例如下:
//第一種方法,宣告時,同時給定陣列元素初值 int[,] num2 = new int[2, 2] { { 1, 2 }, { 4, 8 } }; //第2種方法,宣告後,再分別給定每一個陣列元素初值 int[,] num2 = new int[2, 2]; num2[0, 0] = 1; num2[1, 0] = 2; num2[0, 1] = 4; num2[1, 1] = 8;
A multidimensional array items are represented in a matrix format. To access the elements user needs to define the matrix dimension. The following code snippet is used to define the access to members of an array.
class Demo { static void Main ( string[ ] args ) { int [ , ] num2 = new int [2,2]; num2 [0,0] = 1; num2 [1,0] = 2; num2 [0,1] = 4; num2 [1,1] = 8; //Access members of multidimensional array Console.WriteLine(“The array value is:”+num2[0,0] ); Console.WriteLine(“The array value is:”+num2[0,1] ); Console.WriteLine(“The array value is:”+num2[1,0] ); Console.WriteLine(“The array value is:”+num2[1,1] ); Console.Read(); } }
上面程式的輸入結果如下:
III. 不規則陣列 (Jagged array, 鋸齒狀的陣列)
不規定陣列是陣列中的陣列,一個不規則陣列的元素是另一個陣列,以下示範以2個中括弧來宣告一個不規則陣列,初始化陣列時,第一個元素是列的大小,第一個元素是用來指向後面的一維陣列的參考,第2個元素是一維陣列,是實際的資料元素的儲存資料結構。
程式範例:
class Demo { static void Main ( string [ ] args ) { int [ ] [ ] jagedarray = new int [3] [ ]; jagedarray [0] = new int [2] {1,2}; jagedarray [1] = new int [6] {1,2,3,4,5,6}; jagedarray [2] = new int [3] { 9,10,11}; for ( int i = 0; i<jagedarray.Length;i++) { Console.Write(“Element{0}:”, i+1); for ( int j=0; j<jagedarray[i].Length;j++) { Console.Write(jagedarray[i][j]+”\t”); } Console.WriteLine(); } Console.Read(); } }
上面程式的輸入結果如下:
IV. 參數陣列
當我們喚用一個函式時,除了傳送基本資料型態的參數外,我們尚可以傳遞陣列的參考做為參數,透過陣列的參考,函式可以操作整個陣列物件(傳址)。
程式範例:
class Demo { static int add ( params int [ ] number ) { int sum = 0; foreach ( int n in number ) { sum=sum+n; } return sum; } static void Main ( string[ ] args ) { int sum; sum = Demo.add(1,3,5); Console.WriteLine(“Sum of 1, 3, 5 is \t {0}”, sum ); sum = Demo.add(3,4,5,6,7); Console.WriteLine(“Sum of 3,4,5,6,7 is \t {0}”, sum ); Console.Read(); } }
上面程式的輸入結果如下:
陣列類別 Array Class
在C#的世界,陣列即是物件,因此,一個陣列除了本身的資料外,尚有其他陣列的屬性與方法(程序)可供喚用。首先,底下是陣列屬性的列表及其說明:
屬性 | 說明 |
Length | 傳回陣列元素的數量。 |
LongLength | 長整數型態的Length |
Rank | 傳回陣列的維度 |
Length屬性的使用範例:
class Demo { static void Main( string [ ] args ) { int [ ] intArray = new int [5]; int length = intArray.Length; Console.WriteLine(”The length of the array is”+length); Console.Read(); } }
上面程式的輸入結果如下:
LongLength屬性的使用範例:
class Demo { static void Main ( string [ ] args ) { long [ ] larray = new long [4]; long length = larray.LongLength; Console.WriteLine(“The length of the array is”+length); Console.Read(); } }
上面程式的輸入結果如下:
Rank屬性的使用範例:
class Demo { static void Main ( string [ ] args ) { int [ , ] myarray = new int [2,5]{ {2,3,4,5,6}, {2,3,4,5,6} }; Console.WriteLine(“Total dimensions of the array is:”+myarray.Rank); Console.Read(); } }
上面程式的輸入結果如下:
陣列的方法
方法 | 說明 |
Sort | Array的靜態方法,用以排序一個陣列(透過陣列參數指定要排序的陣列) |
Clear | Array的靜態方法,移除指定的陣列範圍 |
GetLength | 回傳一個陣列裏的大小(元素個數) |
GetValue | 回傳一個陣列裏的特定元素值 |
IndexOf | 取得一個值在一個陣列裏所出現的第一個位置(索引) |
Sort排序方法程式範例:
class Program { static void Main ( string [ ] args ) { char [ ] array ={‘a’,’i’,’e’,’o’,’u’}; Array.Sort(array); foreach ( var c in array ) Console.WriteLine(c); Console.ReadLine(); } }
上面程式的輸入結果如下:
Clear方法程式範例:
class Program { static void Main ( string [ ] args ) { int [ ] intarray = new int[ ] { 4,5,6,8 }; Console.WriteLine(“The values of the array before the method are”); foreach ( int value in intarray ) { Console.WriteLine(value); } Array.Clear(intarray, 0, intarray.Length); Console.WriteLine(“The value of the array after the method are”); foreach ( int value in intarray ) { Console.WriteLine(value); } Console.ReadLine(); } }
上面程式的輸入結果如下:
GetLength方法程式範例:
class Program { static void Main ( string[ ] args ) { int [ , ] arr = new int [5, 5]; Console.WriteLine(“The value is”+arr.GetLength(0)); Console.WriteLine(“The value is”+arr.GetLength(1)); Console.ReadLine(); } }
上面程式的輸入結果如下:
GetValue方法程式範例:
class Program { static void Main ( string[ ] args ) { string [ ] myarr1 = new string[5]; myarr1.SetValue (“three”, 3); Console.WriteLibe(“[3]:{0}”, myarr1.GetValue(3) ); Console.ReadLine(); } }
上面程式的輸入結果如下:
IndexOf方法程式範例:
class Program { static void Main ( string [ ] args ) { int [ ] arr1 = new int [6]; arr1[0] = 1; arr1[1] = 2; arr1[2] = 3; arr1[3] = 5; arr1[4] = 6; arr1[5] = 7; int i = Array.IndexOf(arr1, 3 ); Console.WriteLine(“The value is”+i); Console.ReadLine(); } }
上面程式的輸入結果如下: