2013年12月29日 星期日

C# Arrays 陣列

陣列是經過排序且資料型別相同的項目集合,可使用陣列名稱搭配所需項目從陣列起始處開始計算的位移來存取陣列。C# 和 Java 在陣列宣告方式以及陣列用法上有著一些重大差異。

一維陣列
一維陣列以線性方式儲存固定數目的項目,任一個項目只需要單一索引值來識別。在 C# 中,陣列宣告中的方括弧必須緊接在資料型別之後,但不能放置在變數名稱之後 ,但這點在 Java 中是允許的。因此,integers 型別的陣列使用以下語法來宣告:
int[] arr1;


下列宣告在 C# 中是無效的:
//int arr2[];  //compile error


宣告陣列之後,就可以使用 new 關鍵字來設定陣列的大小,這和在 Java 中相同。下列程式碼宣告陣列參考:
int[] arr;
arr = new int[5];  // create a 5 element integer array


接著使用與 Java 完全相同的語法來存取一維陣列中的項目。C# 的陣列索引也是以零起始。下列程式碼會存取先前陣列的最後一個項目:

System.Console.WriteLine(arr[4]);  // access the 5th element


初始化
C# 陣列項目在建立時可以使用與 Java 完全相同的語法來初始化:
int[] arr2Lines;
arr2Lines = new int[5] {1, 2, 3, 4, 5};


C# 與 Java 不同的是,C# 的初始設定式數目必須剛好符合陣列的大小。可以使用這個功能,在同一行中宣告並初始化 C# 陣列:
int[] arr1Line = {1, 2, 3, 4, 5};


這個語法會建立和初始設定式數目相同大小的陣列。
在程式迴圈中初始化
在 C# 中初始化陣列的另一個方法是使用 for 迴圈。下列迴圈會將陣列中的每個項目設為零:

int[] TaxRates = new int[5];

for (int i=0; i<TaxRates.Length; i++)
{
    TaxRates[i] = 0;
}


不規則陣列
C# 和 Java 都支援建立不規則或非矩形的陣列,此陣列中的每一列都包含不同數目的行。例如,下列不規則陣列的第一列中有四個項目,第二列中則有三個:
C#
int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];


多維陣列
利用 C#,可建立規則的多維陣列,它就像是具有相同型別的值矩陣。Java 和 C# 同時支援不規則陣列,但 C# 還另外支援多維陣列或陣列的陣列。多維陣列可以用在非常多的地方,如地圖標示。
請使用下列語法宣告多維矩形陣列:
int[,] arr2D;      // declare the array reference
float[,,,] arr4D;  // declare the array reference


一旦宣告後,會依下列所示配置記憶體給陣列:
arr2D = new int[5,4];  // allocate space for 5 x 4 integers


接著,陣列的項目可利用下列語法來存取:
arr2D[4,3] = 906;


由於陣列是以零起始,此行會將位於第四列第五行的項目設為 906。
初始化
利用下列任一方法即可在單一陳述式中建立、設定和初始化多維陣列:
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,]   { {1,2,3}, {4,5,6} };
int[,] arr6 =               { {1,2,3}, {4,5,6} };


在程式迴圈中初始化
陣列的所有項目可使用巢狀迴圈來加以初始化,如下所示:
int[,] arr7 = new int[5,4];

for(int i=0; i<5; i++)
{
    for(int j=0; i<4; j++)
    {
        arr7[i,j] = 0;  // initialize each element to zero
    }
}


System.Array 類別
在 .NET Framework 中,陣列是實作為 Array 類別的執行個體。這個類別提供了數個實用的方法,例如 Sort 和 Reverse。
下列的範例說明了這些方法很容易使用。首先,使用 Reverse 方法反轉陣列項目,然後再利用 Sort 方法來排序這些項目:

class ArrayMethods
{
    static void Main()
    {
        // Create a string array of size 5:
        string[] employeeNames = new string[5];

        // Read 5 employee names from user:
        System.Console.WriteLine("Enter five employee names:");
        for(int i=0; i<employeeNames.Length; i++)
        {
            employeeNames[i]= System.Console.ReadLine();
        }

        // Print the array in original order:
        System.Console.WriteLine("\nArray in Original Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }

        // Reverse the array:
        System.Array.Reverse(employeeNames);

        // Print the array in reverse order:
        System.Console.WriteLine("\n\nArray in Reverse Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }

        // Sort the array:
        System.Array.Sort(employeeNames);

        //  Print the array in sorted order:
        System.Console.WriteLine("\n\nArray in Sorted Order:");
        foreach(string employeeName in employeeNames)
        {
            System.Console.Write("{0}  ", employeeName);
        }
    }
}

-雲遊山水為知已逍遙一生而忘齡- 電腦神手

沒有留言:

張貼留言