這個入門教學提供 C# 語言及 System.Collections.Generic.List<T> 類別基礎的介紹。
這個教學教你 C#。 你寫 C# 程式碼,然後看到編譯和執行程式碼的結果。 它包含一系列課程,用以建立、修改及探索收藏。 您主要使用 List<T> 類別。
在本教學課程中,您會:
- 啟動一個帶有 C# 開發環境的 GitHub Codespace。
- 建立不同類型的清單。
- 修改清單內容。
- 搜尋並排序清單。
先決條件
您必須具備以下其中一項:
- 一個用來使用 GitHub Codespaces 的 GitHub 帳號。 如果你還沒有,可以在 GitHub.com 年免費建立帳號。
- 一台安裝了以下工具的電腦:
基本清單範例
若要在教程環境中啟動 GitHub Codespace,請打開瀏覽器視窗前往 教程 codespace 儲存庫。 選擇綠色 程式碼 按鈕,然後進入 Codespaces 標籤。然後選擇 + 符號,利用這個環境建立新的程式碼空間。 如果你完成了這個系列的其他教學,可以打開那個程式碼空間,而不是重新建立一個。
當你的程式碼空間載入時,請在 教學 資料夾裡建立一個名為 lists.cs 的新檔案。
打開你的新檔案。
輸入或複製以下程式碼 lists.cs:
List<string> names = ["<name>", "Ana", "Felipe"]; foreach (var name in names) { Console.WriteLine($"Hello {name.ToUpper()}!"); }請在終端機視窗輸入以下指令執行程式碼:
cd tutorials dotnet lists.cs
你建立了一個字串清單,加入三個名字,並用全大寫字母印出名字。 您使用您在先前教程中學到的概念來遍歷列表。
顯示名稱的程式代碼會使用 字串插補 功能。 當您在 string 前面加上 $ 字元時,您可以在字元串宣告中內嵌 C# 程式代碼。 實際字串會以它所產生的值取代該 C# 程式代碼。 在此範例中,它會以轉換成大寫字母的每個名稱取代 {name.ToUpper()},因為您呼叫了 String.ToUpper 方法。
讓我們繼續探索。
修改清單內容
您建立的集合會使用 List<T> 類型。 此類型會儲存元素的序列。 您可以指定角括弧之間的項目類型。
此 List<T> 類型的其中一個重要層面是它可以成長或縮小,讓您新增或移除元素。 您可以在顯示其內容後修改內容,然後查看結果。
在您撰寫的程式代碼之後新增下列程式代碼(列印內容的循環):
Console.WriteLine(); names.Add("Maria"); names.Add("Bill"); names.Remove("Ana"); foreach (var name in names) { Console.WriteLine($"Hello {name.ToUpper()}!"); }您已將另外兩個名稱新增至清單結尾。 您也移除了一個。 此程式代碼區塊的輸出會顯示初始內容,然後列印空白行和新內容。
List<T> 可讓您藉由 索引 來參考個別項目。 您可以使用
[和]令牌來存取項目。 在您已撰寫的程式代碼之後新增下列程式代碼,並加以嘗試:Console.WriteLine($"My name is {names[0]}."); Console.WriteLine($"I've added {names[2]} and {names[3]} to the list.");您不允許存取超過清單結尾。 你可以使用 Count 屬性來檢查清單的長度。
新增下列程式代碼:
Console.WriteLine($"The list has {names.Count} people in it");在終端機視窗再輸入
dotnet lists.cs一次,可以看到結果。 在 C# 中,索引從 0 開始,因此最大的有效索引小於清單中的項目數目。
如需索引的詳細資訊,請參閱 探索索引和範圍 一文。
搜尋和排序列表
我們的範例會使用相對較小的清單,但您的應用程式通常會建立具有更多元素的清單,有時數千個。 若要尋找這些較大型集合中的元素,您需要搜尋清單中的不同項目。
IndexOf 方法會搜尋專案,並傳回專案的索引。 如果專案不在清單中,IndexOf 會傳回 -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,則找不到該項目。你也可以對清單中的物品進行排序。 Sort 方法會按一般順序排序列表中的所有項目(對字串則是按字母順序排列)。 新增此程式代碼並再次執行:
names.Sort(); foreach (var name in names) { Console.WriteLine($"Hello {name.ToUpper()}!"); }
其他類型的清單
到目前為止,你一直在列表中使用 string 類型。 讓我們用不同的類型來建立List<T>。 讓我們建置一組數位。
請在原始碼檔案末尾加上以下程式碼:
List<int> fibonacciNumbers = [1, 1];該程式碼會建立一個整數清單,並將前兩個整數設為 1。 Fibonacci 序列,數位序列,開頭為兩個 1。 每個下一個 Fibonacci 數位都是藉由取得前兩個數位的總和來找到。
新增此程式代碼:
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1]; var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2]; fibonacciNumbers.Add(previous + previous2); foreach (var item in fibonacciNumbers) { Console.WriteLine(item); }在終端機視窗輸入
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。 你應該會在視窗裡看到你的碼空間清單。 在學習教學程式碼空間的條目中點取三個點(...),然後選擇 刪除。