前言
本篇文章將簡單介紹陣列、集合與列舉使用方法:列舉 (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