---
# System prepended metadata

title: 列舉器與集合

---

## Chapter8 列舉器與集合
### 一、列舉器
而什麼是列舉器呢？我們可以將 Enumerator 視為是一個巡覽器，負責將它所附屬的資料集合中的元素，一個一個的取出並回傳。

.Net Framework 將巡覽器的定義置於 IEnumerator 界面，內含以下兩個方法與一個屬性；
```C#=
public interface IEnumerator

{

    bool MoveNext();

    object Current { get; }

    void Reset();

}
```
![unnamed](https://hackmd.io/_uploads/rJ43a8VEA.gif)

* MoveNext()：將列舉器移動到集合的下一個元素。如果成功移動，返回 true；否則返回 false。
* Current：獲取當前元素。
* Reset()：將列舉器重置到初始位置

### 二、集合
集合是一種用來存儲和管理一組資料的結構。

#### (一)泛型集合類別
泛型集合類別使用類型參數來定義集合中元素的類型。這種集合類別提供了更高的類型安全性和效能，因為在編譯時期確定了元素的類型，避免了運行時期的類型轉換。

#### (二)非泛型集合類別
非泛型集合類別不使用類型參數，而是使用 object 類型來存儲元素。這導致在取出元素時需要進行類型轉換（Unboxing），可能會降低效能並增加出錯的風險。

| 非泛型集合類別  | 泛行集合類別 |  功能說明  |                   
|----------|--------|-------------|
|  ArrayList   |  List<T>                  | 一個強類型的動態陣列      |
|  Stack       |  Stack<T>                 | 一個後進先出（LIFO）的集合     |
|  Queue       |  Queue<T>                 | 一個先進先出（FIFO）的集合      |
|  Hashtable   |  Dictionary<TKey, TValue> | 一個用於存儲鍵值對的集合      |
|  StoredList  |  SortedList<TKey, TValue> | 和字典相似具有排序功能的集合 |



以下是集合常用的一些指令
```C#=   
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // List<T> 範例
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
        numbers.Add(6);  // 添加
        numbers.Remove(2);  // 移除

        
        foreach (int number in numbers)
        {
            Console.WriteLine(number);
        }

        // Dictionary<TKey, TValue> 範例
        Dictionary<string, int> ages = new Dictionary<string, int>
        {
            { "Alice", 30 },
            { "Bob", 25 }
        };
        ages["Charlie"] = 35;  // 添加或更新

        
        int age = ages["Alice"];
        Console.WriteLine($"Alice's age is {age}");
    }
}
```

以上是Chapter 8的內容，後面的集合在課本中還包含著很多屬性與方法，在這裡就不多贅述，有興趣的可以去翻課本，這裡只做簡單的介紹，有問題都歡迎詢問~

製作者:劉柏廷

Email: liubaiting907@gmail.com
