前言
本篇文章將簡單介紹陣列、集合與列舉使用方法:列舉 (Enum) 是我相當喜愛的資料結構之一,學生時期的我,其實不太能理解列舉的用途。而隨著工作年資增長後,漸漸地喜愛使用列舉。列舉能增加程式的可讀性,加速工程師對程式碼的理解;這篇文章所介紹的 陣列 (Array) 與集合 (Collection) 也非常重要,您能透過它們對於大量物件進行操作與邏輯運算,是高階程式語言的基礎之一。每種高階語言都有類似的資料結構,而只是使用上有所差異。若您有相當的程式經驗,您可以略過這部分的介紹。
本篇文章若有錯誤或任何建議,請各位先進不吝指教,謝謝。
目錄:
1.陣列2.集合
2.1 簡單集合使用方法
2.2 Dictionary 使用方法
2.3 Stack & Quene 使用方法
3.列舉
介紹
陣列陣列是建立物件群集的方法之一,其主要限制在於只能固定數量強型別物件,也是我們學習程式語言必須知道的基礎之一。下面是陣列宣告方式:
你可以透過下列方式建立數字、文字與物件陣列:
static void Main(string[] args) { int[] numbers = new int[] { 97, 92, 81, 60 }; foreach (var item in numbers) { Console.WriteLine(item); } string[] strings = new string[] { "Dog", "Cat" }; foreach (var item in strings) { Console.WriteLine(item); } Student[] student = new Student[2]; student[0] = new Student() { Name = "Duran", Age = 30 }; student[1] = new Student() { Name = "Tomaya", Age = 14 }; foreach (var item in student) { Console.WriteLine(item.Name); } }
陣列可以是不規則陣列或多維陣列,我們這邊不在贅述,若您想要了解,可以參考:
1. 不規則陣列
2. 多維陣列
集合
集合與陣列類似,都是建立物件群集的方法。有別於陣列,集合的操作方式比較彈性,可以依照需求增減物件,某些集合類別甚至可以建立 Key,讓您透過Key 快速找到你要的物件。下面為各類型集合宣告方法。
在 .Net Framework 的 System.Collections.Generic 命名空間內有一些我們常用的類別(這些泛型集合強制使用強型別):
Dictionary | 可以依據索引鍵整理的索引鍵/內容值組集合 |
List | 可以依據索引鍵取得內容的集合。 有搜尋、排序和修改方法 |
Queue | 集合操作必須先進先出 (FIFO) |
SortedList | 可依索引鍵所排序的索引鍵/內容值組集合 |
Stack | 集合操作必須後進先出 (LIFO) |
簡單集合使用方法(文字、數字與物件範例)。在這個範例,你可以透過 Add() 與 Remove() 對集合做操作。
static void Main(string[] args) { List<int> numbers = new List<int> { 97,92,81 }; numbers.Add(60); foreach (var item in numbers) { Console.WriteLine(item); } List<string> strings = new List<string> { "Dog","Cat" }; strings.Remove("Cat"); foreach (var item in strings) { Console.WriteLine(item); } List<student> student = new List<student> { new Student { Name = "Duran", Age = 30 }, new Student { Name = "Tomaya", Age = 14 } }; foreach (var item in student) { Console.WriteLine(item.Name); } }
Dictionary 使用方法(Key 為數字,Value 為文字範例)。速度快,但Key 不能為NULL也不能重複,在某些需求或情境下相當好用。
static void Main(string[] args) { Dictionary<int, string> dict = new Dictionary<int, string>(); dict.Add(1, "Dog"); dict.Add(2, "Cat"); Console.WriteLine(dict[1]); }
堆疊 (Stack) 與佇列 (Queue) 主要輸出輸入方式不同(先進後出 / 先進先出)。下面範例為Stack & Queue 使用方法:Stack可以透過 Push 方法加入內容,透過 Pop 方法將內容釋出;Queue 則是透過 Enqueue 方法將內容加入,透過 Dequeue 方法將內容從 Queue 釋出。
static void Main(string[] args) { Stack myStack = new Stack(); myStack.Push("Dog"); myStack.Push("Cat"); Console.WriteLine(myStack.Pop()); Queue myQ = new Queue(); myQ.Enqueue("Dog"); myQ.Enqueue("Cat"); Console.WriteLine(myQ.Dequeue()); }
列舉
一般來說,我們可能有些狀態透過數字表示,但是這樣可讀性很不好。比方說我們定義數字0-6,分別代表週日到周六,而我們的程式內容可能如下:
int today = 0; if(today == 1) { //do something }
列舉可以指定變數名稱給這些整數常數,讓這些數字具有意義。列舉定義範例如下:
int today = 0; enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Day today = Day.Sunday; if(today == Day.Monday) { //do something }
而在顯示或輸出的時候,我們可以直接印出文字與數值,也可以透過Enum.GetName進行下列操作:
static void Main(string[] args) { Console.WriteLine(Day.Friday); string s = Enum.GetName(typeof(Day), 2); Console.WriteLine(s); Console.WriteLine((int)Day.Friday); }
上一篇:[C#][Visual Studio] 方法 Method
下一篇:[C#][Visual Studio] 例外處理 (Exception)
參考資料
1. Study4TW 內部教材2. Arrays - Microsoft docs
3. Enum - Microsoft docs
4. Collection - Microsoft docs
4 留言
堆疊 (Stack) 與佇列 (Queue) 主要輸出輸入方式不同(先進先出 / 先進後出)..
回覆刪除這段好像寫相反了
修正了,謝謝指正 :)
刪除請問這一段
回覆刪除Student[] student = new Student[2];
student[0] = new Student() { Name = "Duran", Age = 30 };
student[1] = new Student() { Name = "Tomaya", Age = 14 };
foreach (var item in student)
{
Console.WriteLine(item.Name);
}
無法過編譯 請問問題在哪邊?
去msdn找不到類似寫法
這是我在同一個專案內新增的類別,你可以新增一個類別像是 Student.cs,內容與這張圖片內容相同:https://1.bp.blogspot.com/-ZnJ6CB2Jp_s/Wfq8WibvNVI/AAAAAAAAfAQ/HoBQmcfFMK8U_BR35U3eHcqes5DkR6WhQCLcBGAs/s1600/503.png
刪除若您想要知道更多關於類別,您可以參考我這篇文章:
https://dog0416.blogspot.com/2017/11/cvisual-studio-class-and-object.html