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#陣列細部探討:

陣列有下列四種型態:

  1. 一維陣列
  2. 多維陣列
  3. 不規則陣列
  4. 4) 參數陣列

I.  一維陣列

一維陣列被用來儲存事先定義的資料型態項目,所有的陣列元素被儲存在連續的記憶體,其位置從0到陣列大小減1,一維陣列的宣告方式舉例如下:

array-declaration

 

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

上面程式的輸入結果如下: