List

在 C# 中,List<T> 是一種通用的集合類型,用來儲存一組同類型的對象。相較於陣列,List<T> 的大小是可變的,可以根據需要動態增加或移除元素。
以下是一些關於 C# List<T> 的基本介紹:


using System;
using System.Collections.Generic; // 使用 List 需要這個命名空間

class Program
{
    static void Main()
    {
        // 1. 宣告並初始化 List
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 一個包含 5 個整數的 List

        // 2. 存取和修改 List 元素
        int firstNumber = numbers[0]; // 取得 List 中的第一個元素
        numbers[1] = 10; // 將 List 中的第二個元素設為 10

        // 3. 遍歷 List
        // 使用 for 迴圈
        for (int i = 0; i < numbers.Count; i++)
        {
            Console.WriteLine("For loop: " + numbers[i]);
        }

        // 使用 foreach 迴圈
        foreach (int number in numbers)
        {
            Console.WriteLine("Foreach loop: " + number);
        }

        // 4. 添加和刪除元素
        numbers.Add(6); // 在 List 末尾添加一個元素
        numbers.Remove(3); // 移除 List 中第一個出現的值為 3 的元素
        numbers.Insert(2, 99); // 在索引 2 的位置插入 99

        // 5. List.Sort()
        List<int> unsortedNumbers = new List<int> { 5, 2, 8, 1, 3 }; // 宣告並初始化 List
        unsortedNumbers.Sort(); // 使用 Sort() 方法對 List 進行排序

        // 輸出排序後的 List
        Console.WriteLine("排序後:");
        foreach (int number in unsortedNumbers)
        {
            Console.Write(number + " ");
        }
        Console.WriteLine();

        // 6. List.Reverse()
        numbers.Reverse(); // 使用 Reverse() 方法將 List 元素順序反轉

        // 輸出反轉後的 List
        Console.WriteLine("反轉後:");
        foreach (int number in numbers)
        {
            Console.Write(number + " ");
        }
        Console.WriteLine();

        // 7. 檢查元素是否存在
        bool containsThree = numbers.Contains(3); // 檢查 List 是否包含 3
        Console.WriteLine("List contains 3: " + containsThree);

        // 8. 取得元素索引
        int indexOfTen = numbers.IndexOf(10); // 取得值為 10 的元素索引
        Console.WriteLine("Index of 10: " + indexOfTen);

        // 9. 清空 List
        numbers.Clear(); // 使用 Clear() 方法清空 List

        // 確認 List 是否清空
        Console.WriteLine("List count after clear: " + numbers.Count); // Output: 0
    }
}

說明

  1. 宣告並初始化 List:使用 List<int> 來宣告一個包含整數的 List,並直接使用初始值進行初始化。
  2. 存取和修改 List 元素:通過索引存取 List 元素,並修改特定位置的元素值。
  3. 遍歷 List:使用 for 迴圈和 foreach 迴圈來遍歷 List 中的元素。
  4. 添加和刪除元素:使用 Add()、Remove() 和 Insert() 方法來添加和刪除 List 中的元素。
  5. List.Sort():使用 Sort() 方法對 List 進行排序。
  6. List.Reverse():使用 Reverse() 方法反轉 List 中元素的順序。
  7. 檢查元素是否存在:使用 Contains() 方法檢查特定元素是否存在於 List 中。
  8. 取得元素索引:使用 IndexOf() 方法取得 List 中特定元素的索引。
  9. 清空 List:使用 Clear() 方法清空 List 中的所有元素。

在 C# 中,List<T> 不僅可以進行基本的操作,還支持一些進階操作來處理更複雜的場景。這些操作能夠讓 List 在處理大數據、過濾、轉換、查詢等情況下更加靈活高效。

以下是一些關於 C# List<T> 的更高階應用介紹:

using System;
using System.Collections.Generic; // 使用 List 需要這個命名空間
using System.Linq; // 使用 LINQ 方法需要這個命名空間

class Program
{
    static void Main()
    {
        // 1. 使用 LINQ 查詢 List
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

        // 取得所有偶數
        List<int> evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
        Console.WriteLine("偶數:");
        foreach (var num in evenNumbers)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();

        // 2. List.ForEach() 方法
        // 使用 List 的 ForEach() 方法進行批量操作
        numbers.ForEach(n => Console.WriteLine("Number: " + n));

        // 3. List.ConvertAll() 方法
        // 將 List 中的整數轉換為對應的字符串
        List<string> stringNumbers = numbers.ConvertAll(n => n.ToString());
        Console.WriteLine("轉換為字串:");
        foreach (var str in stringNumbers)
        {
            Console.Write(str + " ");
        }
        Console.WriteLine();

        // 4. List.Find() 和 List.FindAll() 方法
        // 使用 Find() 方法找到第一個符合條件的元素
        int firstEven = numbers.Find(n => n % 2 == 0);
        Console.WriteLine("第一個偶數: " + firstEven);

        // 使用 FindAll() 方法找到所有符合條件的元素
        List<int> largeNumbers = numbers.FindAll(n => n > 5);
        Console.WriteLine("大於 5 的數字:");
        foreach (var num in largeNumbers)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();

        // 5. List.Exists() 方法
        // 檢查是否存在符合條件的元素
        bool hasLargeNumber = numbers.Exists(n => n > 10);
        Console.WriteLine("List 是否有大於 10 的數字: " + hasLargeNumber);

        // 6. List.TrueForAll() 方法
        // 檢查所有元素是否都符合條件
        bool allPositive = numbers.TrueForAll(n => n > 0);
        Console.WriteLine("List 中是否全為正數: " + allPositive);

        // 7. List.BinarySearch() 方法
        // 使用 BinarySearch() 進行二分搜尋 (需要先排序)
        numbers.Sort();
        int index = numbers.BinarySearch(6);
        Console.WriteLine("數字 6 的索引: " + index);

        // 8. List.GetRange() 方法
        // 取得 List 的部分範圍
        List<int> subList = numbers.GetRange(2, 5); // 取得從索引 2 開始的 5 個元素
        Console.WriteLine("子 List:");
        foreach (var num in subList)
        {
            Console.Write(num + " ");
        }
        Console.WriteLine();

        // 9. List.Capacity 和 List.TrimExcess()
        // 調整 List 的容量以優化記憶體
        Console.WriteLine("原始容量: " + numbers.Capacity);
        numbers.TrimExcess(); // 去除多餘的容量
        Console.WriteLine("優化後的容量: " + numbers.Capacity);
    }
}

說明

  1. 使用 LINQ 查詢 List:利用 LINQ 查詢,過濾出符合條件的元素,並返回新的 List。
  2. List.ForEach() 方法:批量對 List 中的每個元素執行特定操作。
  3. List.ConvertAll() 方法:將 List 中的每個元素轉換為另一種型別。
  4. List.Find() 和 List.FindAll() 方法:查找符合條件的第一個元素或所有符合條件的元素。
  5. List.Exists() 方法:檢查是否有任何元素符合指定條件。
  6. List.TrueForAll() 方法:檢查 List 中的所有元素是否都符合某個條件。
  7. List.BinarySearch() 方法:在排序好的 List 中進行二分搜尋,找到指定元素的索引。
  8. List.GetRange() 方法:提取 List 的子集合,取得部分範圍的元素。
    List.Capacity 和 List.TrimExcess():調整 List 的容量以優化記憶體使用。
  9. 這些更高階應用使 List 在處理大規模數據和複雜操作時更加高效,並且提供了豐富的功能來應對各種情況。