了解如何使用一般清單類型管理資料收集
此教學課程會以互動方式讓您使用瀏覽器撰寫 C# 程式碼,並查看編譯及執行程式碼的結果,以了解 C#。 它包含一系列針對建立、修改及探索集合和陣列的課程。
提示
若要在焦點模式中貼上程式碼片段,您應該使用鍵盤快速鍵 (Ctrl + v 或 cmd + v)。
建立清單
在互動式視窗中執行下列程式碼。 選取 [進入焦點模式] 按鈕。 接著,在互動視窗中輸入下列程式碼區塊 (以您的名稱取代 <name>
),並選取 [執行]:
var names = new List<string> { "<name>", "Ana", "Felipe" };
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
如果您在環境中執行此程式碼區塊,建議您改為遵循本機版本的指示。
您已建立字串清單,在該清單中新增三個名稱,並以全部大寫的形式列印出那些名稱。 您會使用從先前教學課程中學習到的概念,在清單中執行迴圈。
顯示名稱的程式碼會運用字串內插補點功能。 當您在 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");
再次選取 [執行] 查看結果。 在 C# 中,索引是從 0 開始,因此最大的有效索引數目為清單項目數目減去 1。
針對清單進行搜尋和排序
我們的範例所使用的清單相對較小,但是您的應用程式可能經常會建立具有更多元素的清單,數量甚至會達數千個之多。 若要在這些較大的集合中尋找元素,您需要在清單中搜尋不同的項目。 IndexOf 方法會搜尋項目,並傳回該項目的索引。 如果項目不在清單中,IndexOf
會傳回 -1
。 請試用它以查看其運作方式。 在您目前已撰寫的程式碼下方新增下列程式碼:
var index = names.IndexOf("Felipe");
if (index != -1)
{
Console.WriteLine($"The name {names[index]} is at index {index}");
}
var notFound = names.IndexOf("Not Found");
Console.WriteLine($"When an item is not found, IndexOf returns {notFound}");
您可能不清楚項目是否已位於清單中,因此您應該一律檢查由 IndexOf 所傳回的索引。 如果該值是 -1
,即找不到項目。
也可以對您清單中的項目進行排序。 Sort 方法會依項目的一般順序 (依字母順序排列字串) 排序清單中所有項目。 新增下列程式碼,然後再次執行:
names.Sort();
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}!");
}
其他類型的清單
到目前為止,您都是使用清單中的 string
類型。 讓我們使用不同的類型建立 List<T>。 讓我們來建置一組數字。 刪除您到目前為止撰寫的程式碼,並以下列程式碼取代它:
var fibonacciNumbers = new List<int> {1, 1};
這將會建立整數清單,並將前兩個整數設定為 1 的值。 「費氏數列」,是從兩個 1 開始的一連串數字。 這兩個值之後每個費式數列數字,都會是其前兩個數字的總和。 新增下列程式碼:
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 個數字。 (小提示:第 20 個費式數列數字為 6765)。
完成挑戰
您是否有得到與下列程式碼類似的內容?
var fibonacciNumbers = new List<int> {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 個項目新增至清單為止。
恭喜!
您已經完成清單互動式教學課程。 那是對於 C# 互動式教學課程的最終簡介。 您可以前往 .NET 網站下載 .NET SDK、在您的機器上建立專案,並繼續編碼。 「後續步驟」章節會帶您返回這些教學課程。
您可以在下列文章中深入了解 .NET 集合:
在這個區段有遇到問題嗎? 如果有,請提供意見反應,好讓我們可以改善這個區段。