共用方式為


教學:學習使用 C 語言中的 List<T> 來管理資料集合#

這個入門教學提供 C# 語言及 System.Collections.Generic.List<T> 類別基礎的介紹。

這個教學教你 C#。 你寫 C# 程式碼,然後看到編譯和執行程式碼的結果。 它包含一系列課程,用以建立、修改及探索收藏。 您主要使用 List<T> 類別。

在本教學課程中,您會:

  • 啟動一個帶有 C# 開發環境的 GitHub Codespace。
  • 建立不同類型的清單。
  • 修改清單內容。
  • 搜尋並排序清單。

先決條件

您必須具備以下其中一項:

基本清單範例

若要在教程環境中啟動 GitHub Codespace,請打開瀏覽器視窗前往 教程 codespace 儲存庫。 選擇綠色 程式碼 按鈕,然後進入 Codespaces 標籤。然後選擇 + 符號,利用這個環境建立新的程式碼空間。 如果你完成了這個系列的其他教學,可以打開那個程式碼空間,而不是重新建立一個。

  1. 當你的程式碼空間載入時,請在 教學 資料夾裡建立一個名為 lists.cs 的新檔案。

  2. 打開你的新檔案。

  3. 輸入或複製以下程式碼 lists.cs

    List<string> names = ["<name>", "Ana", "Felipe"];
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }
    
  4. 請在終端機視窗輸入以下指令執行程式碼:

    cd tutorials
    dotnet lists.cs
    

你建立了一個字串清單,加入三個名字,並用全大寫字母印出名字。 您使用您在先前教程中學到的概念來遍歷列表。

顯示名稱的程式代碼會使用 字串插補 功能。 當您在 string 前面加上 $ 字元時,您可以在字元串宣告中內嵌 C# 程式代碼。 實際字串會以它所產生的值取代該 C# 程式代碼。 在此範例中,它會以轉換成大寫字母的每個名稱取代 {name.ToUpper()},因為您呼叫了 String.ToUpper 方法。

讓我們繼續探索。

修改清單內容

您建立的集合會使用 List<T> 類型。 此類型會儲存元素的序列。 您可以指定角括弧之間的項目類型。

List<T> 類型的其中一個重要層面是它可以成長或縮小,讓您新增或移除元素。 您可以在顯示其內容後修改內容,然後查看結果。

  1. 在您撰寫的程式代碼之後新增下列程式代碼(列印內容的循環):

    Console.WriteLine();
    names.Add("Maria");
    names.Add("Bill");
    names.Remove("Ana");
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }
    

    您已將另外兩個名稱新增至清單結尾。 您也移除了一個。 此程式代碼區塊的輸出會顯示初始內容,然後列印空白行和新內容。

  2. List<T> 可讓您藉由 索引 來參考個別項目。 您可以使用 [] 令牌來存取項目。 在您已撰寫的程式代碼之後新增下列程式代碼,並加以嘗試:

    Console.WriteLine($"My name is {names[0]}.");
    Console.WriteLine($"I've added {names[2]} and {names[3]} to the list.");
    

    您不允許存取超過清單結尾。 你可以使用 Count 屬性來檢查清單的長度。

  3. 新增下列程式代碼:

    Console.WriteLine($"The list has {names.Count} people in it");
    

    在終端機視窗再輸入 dotnet lists.cs 一次,可以看到結果。 在 C# 中,索引從 0 開始,因此最大的有效索引小於清單中的項目數目。

如需索引的詳細資訊,請參閱 探索索引和範圍 一文。

搜尋和排序列表

我們的範例會使用相對較小的清單,但您的應用程式通常會建立具有更多元素的清單,有時數千個。 若要尋找這些較大型集合中的元素,您需要搜尋清單中的不同項目。 IndexOf 方法會搜尋專案,並傳回專案的索引。 如果專案不在清單中,IndexOf 會傳回 -1

  1. 請嘗試查看其運作方式。 在到目前為止所撰寫的內容之後新增下列程式代碼:

    var index = names.IndexOf("Felipe");
    if (index == -1)
    {
        Console.WriteLine($"When an item is not found, IndexOf returns {index}");
    }
    else
    {
        Console.WriteLine($"The name {names[index]} is at index {index}");
    }
    
    index = names.IndexOf("Not Found");
    if (index == -1)
    {
        Console.WriteLine($"When an item is not found, IndexOf returns {index}");
    }
    else
    {
        Console.WriteLine($"The name {names[index]} is at index {index}");
    }
    

    您可能不知道某項目是否在清單中,因此應該一律檢查所傳回的 IndexOf索引。 如果是 -1,則找不到該項目。

  2. 你也可以對清單中的物品進行排序。 Sort 方法會按一般順序排序列表中的所有項目(對字串則是按字母順序排列)。 新增此程式代碼並再次執行:

    names.Sort();
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }
    

其他類型的清單

到目前為止,你一直在列表中使用 string 類型。 讓我們用不同的類型來建立List<T>。 讓我們建置一組數位。

  1. 請在原始碼檔案末尾加上以下程式碼:

    List<int> fibonacciNumbers = [1, 1];
    

    該程式碼會建立一個整數清單,並將前兩個整數設為 1。 Fibonacci 序列,數位序列,開頭為兩個 1。 每個下一個 Fibonacci 數位都是藉由取得前兩個數位的總和來找到。

  2. 新增此程式代碼:

    var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
    var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
    
    fibonacciNumbers.Add(previous + previous2);
    
    foreach (var item in fibonacciNumbers)
    {
        Console.WriteLine(item);
    }
    
  3. 在終端機視窗輸入 dotnet lists.cs 即可查看結果。

挑戰

查看您是否可以結合此課程和先前課程的一些概念。 擴充您到目前為止使用斐波那契數列所建置的內容。 嘗試撰寫程式代碼來產生序列中的前 20 個數位。 (作為提示,第20個菲博納奇數位是6765。

你想到類似的東西嗎?

List<int> fibonacciNumbers = [1, 1];

while (fibonacciNumbers.Count < 20)
{
    var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
    var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

    fibonacciNumbers.Add(previous + previous2);
}
foreach (var item in fibonacciNumbers)
{
    Console.WriteLine(item);
}

每次循環時,你將清單中最後兩個整數加總,然後將該數值加入清單。 這個循環會重複,直到你在清單上加入 20 個項目。

你完成了清單教學。 您可以在下列文章中深入瞭解 .NET 集合

清理資源

GitHub 會在你 30 天不活躍後自動刪除你的 Codespace。 如果你打算繼續探索這個系列的更多教學,可以讓你的 Codespace 保持配置。 如果你準備好去 .NET 網站 下載 .NET SDK,你可以刪除你的 Codespace。 要刪除你的 Codespace,打開瀏覽器視窗並導航到 你的 Codespaces。 你應該會在視窗裡看到你的碼空間清單。 在學習教學程式碼空間的條目中點取三個點(...),然後選擇 刪除

後續步驟