變量用于存儲字面量值,而數(shù)組用于存儲多個字面量值。
數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),它存儲相同數(shù)據(jù)類型的固定數(shù)量的文本值(元素)。數(shù)組元素連續(xù)地存儲在內(nèi)存中。
在C#中,數(shù)組可以為三種類型:一維數(shù)組,多維數(shù)組 和 鋸齒數(shù)組。在這里,您將了解一維數(shù)組。
下圖說明了數(shù)組表示形式。
可以使用方括號指定數(shù)組的元素類型來聲明數(shù)組。
int[] evenNums; // 整數(shù)數(shù)組 string[] cities; // 字符串?dāng)?shù)組
以下語句在單個語句中聲明并將值添加到數(shù)組中。
int[] evenNums = new int[5]{ 2, 4, 6, 8, 10 }; string[] cities = new string[3]{ "Mumbai", "London", "New York" };
在上面,evenNums 數(shù)組最多可以存儲五個整數(shù)。new int[5] 方括號中的數(shù)字 5 是指定數(shù)組的大小。同樣,cities 數(shù)組的大小為3。數(shù)組元素被添加到大括號 {} 中以逗號分隔的列表中。
數(shù)組類型變量可以使用 var 聲明,而沒有方括號 []。
var evenNums = new int[]{ 2, 4, 6, 8, 10}; var cities = new string[]{ "Mumbai", "London", "New York" };
如果要在聲明時添加數(shù)組元素,則 size 是可選的。編譯器將根據(jù)花括號內(nèi)的元素數(shù)量推斷其大小,如下所示。
int[] evenNums = { 2, 4, 6, 8, 10}; string[] cities = { "Mumbai", "London", "New York" }
下面的示例演示無效的數(shù)組聲明。
//必須指定大小 int[] evenNums = new int[]; //元素數(shù)必須等于指定的大小 int[] evenNums = new int[5] { 2, 4 }; //不能將var與數(shù)組初始化程序一起使用 var evenNums = { 2, 4, 6, 8, 10};
不必在單個語句中聲明和初始化數(shù)組。您可以先聲明一個數(shù)組,然后再使用 new 運算符對其進(jìn)行初始化。
int[] evenNums; evenNums = new int[5]; // 或 evenNums = new int[]{ 2, 4, 6, 8, 10 };
可以使用索引訪問數(shù)組元素。索引是與每個數(shù)組元素關(guān)聯(lián)的數(shù)字,從索引 0 開始 到 數(shù)組大小-1 結(jié)束。
以下示例使用索引添加/更新和檢索數(shù)組元素。
int[] evenNums = new int[5]; evenNums[0] = 2; evenNums[1] = 4; //evenNums[6] = 12; //拋出運行時異常IndexOutOfRange Console.WriteLine(evenNums[0]); //輸出 2 Console.WriteLine(evenNums[1]); //輸出 4
請注意,嘗試添加超出其指定大小的元素會拋出 IndexOutOfRangeException 異常。
使用for循環(huán)訪問數(shù)組元素。在for循環(huán)的條件表達(dá)式中使用數(shù)組的 length 屬性。
int[] evenNums = { 2, 4, 6, 8, 10 }; for(int i = 0; i < evenNums.Length; i++){ Console.WriteLine(evenNums[i]); } for(int i = 0; i < evenNums.Length; i++){ evenNums[i] = evenNums[i] + 10; // 將每個元素的值更新10 }
使用foreach循環(huán)讀取數(shù)組元素的值而不使用索引。
int[] evenNums = { 2, 4, 6, 8, 10}; string[] cities = { "Mumbai", "London", "New York" }; foreach(var item in evenNums){ Console.WriteLine(item); } foreach(var city in cities){ Console.WriteLine(city); }
C#中的所有數(shù)組均派生自抽象基類 System.Array。
Array類實現(xiàn)了IEnumerable接口,這樣你就可以LINQ擴展方法,如 Max(),Min(),Sum(),reverse()等。
int[] nums = new int[5]{ 10, 15, 16, 8, 6 }; nums.Max(); // 返回16 nums.Min(); // 返回6 nums.Sum(); // 返回55 nums.Average(); // 返回55
System.Array 類還包括用于創(chuàng)建,操作,搜索和數(shù)組排序的方法。
int[] nums = new int[5]{ 10, 15, 16, 8, 6 }; Array.Sort(nums); // 排序數(shù)組 Array.Reverse(nums); // 排序數(shù)組 in descending order Array.ForEach(nums, n => Console.WriteLine(n)); // 迭代數(shù)組 Array.BinarySearch(nums, 5);// 二進(jìn)制搜索
可以將數(shù)組作為參數(shù)傳遞給方法參數(shù)。數(shù)組是引用類型,因此該方法可以更改數(shù)組元素的值。
public static void Main(){ int[] nums = { 1, 2, 3, 4, 5 }; UpdateArray(nums); foreach(var item in nums) Console.WriteLine(item); } public static void UpdateArray(int[] arr) { for(int i = 0; i < arr.Length; i++) arr[i] = arr[i] + 10; }