前言

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