# Array
在 C# 中,陣列(Array)是一種用來儲存固定大小的同類型元素的資料結構。陣列讓你能夠以索引的方式來存取這些元素。以下是一些關於 C# 陣列的簡單介紹:
1. 陣列的宣告和初始化
宣告陣列
你可以先宣告一個陣列,並指定它的類型和大小,但不立即初始化它的內容。例如:
```
int[] numbers; // 宣告一個整數型別的陣列
```
初始化陣列
你可以在宣告時直接初始化陣列,並指定它的元素:
```
int[] numbers = new int[5]; // 宣告一個包含 5 個整數的陣列,所有元素初始為 0
```
使用初始值設定陣列
你也可以在宣告時就給陣列賦初值:
```
int[] numbers = { 1, 2, 3, 4, 5 }; // 宣告並初始化一個包含 5 個整數的陣列
```
2. 存取和修改陣列元素
每個陣列元素都可以通過索引來存取,索引從 0 開始。例如:
```
int[] numbers = { 1, 2, 3, 4, 5 };
int firstNumber = numbers[0]; // 取得陣列中的第一個元素,結果是 1
numbers[1] = 10; // 將陣列中的第二個元素設為 10
```
3. 陣列的基本操作
遍歷陣列
你可以使用 for 或 foreach 迴圈來遍歷陣列中的所有元素:
```
int[] numbers = { 1, 2, 3, 4, 5 };
// 使用 for 迴圈
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
// 使用 foreach 迴圈
foreach (int number in numbers)
{
Console.WriteLine(number);
}
```
取得陣列長度
你可以使用 Length 屬性來獲取陣列的長度(即元素的個數):
```
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // length 的值是 5
```
4. 多維陣列
C# 支援多維陣列,例如二維陣列(矩陣):
```
int[,] matrix = new int[3, 3]; // 宣告一個 3x3 的二維陣列
// 初始化二維陣列
matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[0, 2] = 3;
matrix[1, 0] = 4;
matrix[1, 1] = 5;
matrix[1, 2] = 6;
matrix[2, 0] = 7;
matrix[2, 1] = 8;
matrix[2, 2] = 9;
```
5. 陣列的其他特性
陣列是固定大小的:一旦你創建了陣列,它的大小就不能再更改。如果需要可變大小的容器,可以使用 List<T> 類型。
陣列的索引是從 0 開始的:陣列的第一個元素索引是 0,第二個元素索引是 1,以此類推。
---
### ArraySort()
Array.Sort() 是 C# 中用來對陣列進行排序的方法。它會根據陣列元素的自然順序(對於數字是從小到大,對於字串是字母順序)來對陣列進行排序。這是一個非常實用的方法,尤其是在需要處理排序的數據時。
```
using System;
class Program
{
static void Main()
{
// 宣告並初始化整數陣列
int[] numbers = { 5, 2, 8, 1, 3 };
// 輸出排序前的陣列
Console.WriteLine("排序前:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
Console.WriteLine();
// 使用 Array.Sort() 方法對陣列進行排序
Array.Sort(numbers);
// 輸出排序後的陣列
Console.WriteLine("排序後:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
}
}
Output:
排序前:
5 2 8 1 3
排序後:
1 2 3 5 8
```
---
### Array.Reverse()
Array.Reverse() 是 C# 中用來將陣列元素順序反轉的方法。它會將陣列中元素的順序反向排列,從而使原本的第一個元素變成最後一個,第二個變成倒數第二個,以此類推。
```
using System;
class Program
{
static void Main()
{
// 宣告並初始化整數陣列
int[] numbers = { 1, 2, 3, 4, 5 };
// 輸出反轉前的陣列
Console.WriteLine("反轉前:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
Console.WriteLine();
// 使用 Array.Reverse() 方法對陣列進行反轉
Array.Reverse(numbers);
// 輸出反轉後的陣列
Console.WriteLine("反轉後:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
}
}
Output:
反轉前:
1 2 3 4 5
反轉後:
5 4 3 2 1
```
若只想要部分反轉?
```
int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers, 1, 3); // 反轉從索引 1 開始的 3 個元素
這會將 numbers 陣列中的第二到第四個元素反轉,結果為 { 1, 4, 3, 2, 5 }。
```
### Array.Clear()
Array.Clear() 是 C# 中用來清除陣列中指定範圍的元素的方法。它會將指定範圍的所有元素設置為該陣列元素類型的預設值。例如,對於數字類型(如 int),預設值是 0;對於字串類型,預設值是 null。
```
public static void Clear(Array array, int index, int length)
```
* array: 需要進行清除的陣列。
* index: 從哪個索引位置開始清除。
* length: 要清除的元素數量。
假設你有一個整數陣列,並且你想要將其中的一部分元素清除(即設置為 0):
```
using System;
class Program
{
static void Main()
{
// 宣告並初始化整數陣列
int[] numbers = { 1, 2, 3, 4, 5 };
// 輸出清除前的陣列
Console.WriteLine("清除前:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
Console.WriteLine();
// 使用 Array.Clear() 方法清除陣列中的一部分元素
// 這裡我們從索引 1 開始,清除 3 個元素
Array.Clear(numbers, 1, 3);
// 輸出清除後的陣列
Console.WriteLine("清除後:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
}
}
Output:
清除前:
1 2 3 4 5
清除後:
1 0 0 0 5
```
對於其他類型的預設值:
* bool,預設值是 false。
* string,預設值是 null。
* 對於參考型別(例如對象),預設值也是 null。
### Array.IndexOf()
Array.IndexOf() 是 C# 中一個用於查找數組中特定元素位置的方法。它返回該元素在數組中的索引位置,如果找不到該元素則返回 -1。這個方法是靜態方法,屬於 System.Array 類,並且可以用於任何類型的數組。
基本概念
* 定義:Array.IndexOf() 方法在數組中搜索指定的元素,並返回該元素第一次出現的索引。
* 用途:這個方法用於查找數組中某個元素的位置,適用於處理需要快速定位元素的情況,如搜索和數據匹配等。
```
using System;
class Program
{
static void Main(string[] args)
{
// 定義一個整數數組,包含一些預設的數字
int[] numbers = new int[]
{
90, 199, 22, 50, 30
};
// 提示用戶輸入要搜尋的數字
Console.WriteLine("請輸入你要搜尋的數字:");
// 從用戶的輸入讀取一個數字,並將其轉換為整數
int search = Convert.ToInt32(Console.ReadLine());
// 使用 Array.IndexOf() 方法查找數組中的數字
// 這裡我們指定從索引 1 開始,在索引範圍 1-2 中查找
// 也就是說,它只會在 { 199, 22 } 這兩個數字中查找
int position = Array.IndexOf(numbers, search, 1, 2);
// 檢查找到的索引值是否大於 -1,表示數字是否存在於指定範圍內
if (position > -1)
{
// 如果找到了數字,顯示數字和其在數組中的位置
// position + 1 是因為索引從 0 開始,但我們想顯示從 1 開始的位置信息
Console.WriteLine($"Number {search} has been found at position {position + 1}");
}
else
{
// 如果找不到數字,告訴用戶數字不在範圍內
Console.WriteLine($"Number {search} has not been found");
}
}
}
```
假設數組為 { 90, 199, 22, 50, 30 }:
用戶輸入 199,則輸出:Number 199 has been found at position 2。
用戶輸入 22,則輸出:Number 22 has been found at position 3。
用戶輸入 50,則輸出:Number 50 has not been found(因為查找範圍是索引 1 到 2)。
用戶輸入 90,則輸出:Number 90 has not been found(因為查找範圍是索引 1 到 2)。
### Array.Copy()
Array.Copy()是 C# 中用來複製一個陣列的內容到另一個陣列中的方法。這個方法可以用來複製整個陣列或部分陣列,並且可以指定從源陣列和目標陣列的哪個索引位置開始複製。
Array.Copy() 方法有多個重載,最常見的重載形式如下:
```
public static void Copy(Array sourceArray, Array destinationArray, int length);
public static void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length);
```
* sourceArray: 要複製數據的源數組。
* destinationArray: 要將數據複製到的目標數組。
* length: 要複製的元素數量。
* sourceIndex (可選): 開始複製的源數組的索引位置。
* destinationIndex (可選): 開始將元素複製到目標數組的索引位置。
```
using System;
class Program
{
static void Main()
{
// 定義源數組
int[] sourceArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// 定義目標數組,大小為 10
int[] destinationArray = new int[10];
// 將 sourceArray 的第 3 到第 7 個元素(4, 5, 6, 7, 8)複製到 destinationArray 的索引 5 開始的位置
Array.Copy(sourceArray, 3, destinationArray, 5, 5);
// 打印目標數組
Console.WriteLine("Destination Array:");
foreach (int item in destinationArray)
{
Console.Write(item + " "); // Output: 0 0 0 0 0 4 5 6 7 8
}
}
}
```
在這個例子中:
1. 源數組 (sourceArray): 這是一個包含 10 個整數的數組 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }。
2. 目標數組 (destinationArray): 初始化為 10 個元素的空數組,所有值默認為 0。
3. Copy(): sourceArray, 3: 從 source array 的 index 3 開始,對應 4。
destinationArray, 5: 複製到目標 array 的 index 5 開始的位置。
5: 要複製的元素數量是 5,即複製 4, 5, 6, 7, 8。
4. 結果: 目標數組 destinationArray 的前五個元素保持為默認值 0,而從 index 5 開始,填補了來自 sourceArray 的 4, 5, 6, 7, 8。