陣列是用來儲存一組相同資料型態的資料的一個資料結構體,一個陣列的宣告是以資料型態加上空的中括弧( [ ] )來進行,陣列的索引值一律從零開始,陣列的第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維陣列
...
多維陣列可以是固定或變動大小,一個2x2整數矩陣的宣告程式範例如下:
//第一種方法,宣告時,同時給定陣列元素初值
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();
}
}
上面程式的輸入結果如下: