跳至頁尾內容
Iron Academy Logo
學習C#
學習C#

其他類別

理解C#中的列表

Layla Porter
14m 6s

C#中的List類別,它是一種多功能的集合型別。 它基於動態陣列作為內部資料結構,允許有效地操作元素。 當您建立List時,您可以指定一個預設的初始容量,以便在開始時就優化記憶體使用。 這個容量是列表可以初始承載的元素數量,而不需重新配置記憶體。

在Layla Porter的影片"C# for Beginners Part 7 - Querying Data with LINQ"中,她深入探索了C#清單的功能,演示如何利用LINQ(Language Integrated Query)來有效地查詢資料。 本文分解了Layla影片中的關鍵概念和例子,為初學者提供對C#清單的全面理解。

介紹C#Lists

正如Layla在影片一開始(0:03)提到的,C#清單是一個多功能的資料結構,允許開發者儲存和操作一組元素。 與陣列不同,清單可以動態調整其大小,這使得它們非常適合於元素數量不事先知道的情況。

使用List是很簡單的。 您可以使用Add方法將元素新增到清單中,該方法會將指定物件附加到清單的末尾。清單使用零為基的索引,意味著第一個元素位於索引0。您還可以使用中括號([])語法按指定的索引來存取元素。

要遍歷清單,您可以使用foreach迴圈,它會按元素出現的順序迭代每個元素。 如果您需要找到某個特定元素的第一次出現,可以使用如IndexOf上的謂詞之類的方法,這會根據指定的條件進行搜索。

List是強型別的,意味著它保存特定型別(T)的物件。 這保證了型別的安全性,並允許使用指定型別的物件定義的方法和屬性。 預設情況下,List使用預設的哈希函式來有效地組織元素。

讓我們深入探索Layla在她的影片中演示的List和List類別方法的工作原理。

建立List

在C#中建立清單時,您可以設置指定的初始容量,以優化內部資料結構。 清單用途廣泛,可以從指定的元素集合初始化。 您可以使用int索引來存取項目,並使用foreach迴圈遍歷它們。與字典不同,清單不依賴於預設的哈希函式,並且它們儲存強型別的物件,確保型別安全性和資料管理的一致性。

在(0:44),Layla建立了一個奶酪清單,演示如何初始化和填充清單。在C#中,可以使用List類別建立一個清單,其中T代表清單中包含的元素的型別。

List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};
List<Cheese> cheeseList = new List<Cheese>
{
    new Cheese(1, "Stilton", 3.0m, 5),
    new Cheese(2, "Cheddar", 2.25m, 3),
    new Cheese(3, "Pineapple", 3.5m, 1),
    new Cheese(4, "Brie", 5.5m, 2),
    new Cheese(5, "Roquefort", 3.5m, 5),
};

在上面的例子中,Layla使用集合初始化語法建立了一個Cheese物件。 她指定了每個奶酪物件的屬性,如ID、名稱、價格和強度,演示了在C#中清單的建立和初始化。

遍歷奶酪清單以列印ID和名稱

Layla Porter演示如何使用foreach迴圈遍歷cheeseList,並僅列印每個奶酪的ID和名稱。 下面是程式碼以及說明:

foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
foreach (var cheese in cheeseList)
{
    Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}

在上面的程式碼中,Layla使用foreach迴圈遍歷cheeseList。 這將列印出清單中的所有元素。迴圈遍歷清單中的每個Cheese物件。在每次迭代中,變數cheese保存當前指定索引處的Cheese物件。 使用Console.WriteLine,她列印每個奶酪元素的ID和名稱,展示如何在C#中存取和顯示特定清單元素。

使用LINQ查詢搜索奶酪

在影片的2:45,Layla Porter演示如何根據使用者輸入使用LINQ搜索特定奶酪。 她使用ReadLine方法從使用者那裡獲取奶酪名稱:

string cheeseName = Console.ReadLine();
string cheeseName = Console.ReadLine();

在搜索清單中的項目時,Layla在2:51強調了一個非常重要的關鍵點。她說,如果不使用LINQ,我們將必須手動遍歷我們的集合中的每一個奶酪以找到與使用者輸入匹配的名稱,但LINQ的輔助庫在背後處理這一點,使得過程非常高效。 以下程式碼片段演示了Layla(3:40)如何在不使用for迴圈的情況下僅使用LINQ查詢語法遍歷清單元素:

if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
    Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);

    Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
    Console.WriteLine("I'm sorry, we don't have that cheese.");
}

在上面的程式碼中:

  • Layla解釋說,與其手動遍歷清單,我們可以使用LINQ進行更高效的搜索。 Any方法檢查列表中是否有任何奶酪名稱與使用者輸入的名稱匹配。

  • 如果找到匹配的話,意味著該元素存在,FirstOrDefault方法檢索與輸入名稱匹配的第一個奶酪。 此方法很安全,因為如果找不到匹配項,它將返回null,防止可能的錯誤。

  • 如果找到奶酪,則列印其名稱、價格和強度。 如果沒有,則顯示一條資訊,指示找不到奶酪。

這種方法展示了使用LINQ查詢C#集合的效率和簡單性。 程式碼片段的輸出在7:19顯示:(比下面的一張更好的圖像嗎?)

範例輸出

搜索時處理大小寫敏感

當處理字串時,Layla在8:00提醒我們重要的是要記住它們是區分大小寫的。為了確保我們的奶酪名稱比較不區分大小寫,我們需要使用.ToLower()方法將使用者輸入和我們清單中的奶酪名稱轉換為小寫。 這允許使用者使用任何型別的大小寫輸入,而我們的程式碼仍然可以正確地找到匹配的奶酪。 只要記住字串大小寫敏感性可能是個麻煩,適當處理它是至關重要的。

實際例子:按強度查詢奶酪

在(8:50),Layla建立了一個實際例子,在這裡使用者可以按其強度篩選奶酪,演示如何將使用者輸入與LINQ查詢結合。

1. 使用者輸入提示和讀取

Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();

Layla在9:05開始要求使用者選擇1到5之間的強度值。這是用一個簡單的Console.ReadLine()來抓住他們的輸入。

2. 將輸入轉換為整數

bool isInt = int.TryParse(strengthString, out int strength);
bool isInt = int.TryParse(strengthString, out int strength);

接下來,在9:16她確保他們的輸入是一個實際的數字。 她建議使用int.TryParse來達到這點。 如果輸入檢查並成功轉換為整數,非常好! 如果不行,那麼我們可以優雅地處理。

3. 按強度篩選奶酪

List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();

在Layla的影片的10:25出現了有趣的部分。在這裡,她展示了如何使用cheeseList利用LINQ篩選我們的奶酪清單。 使用LINQ的(c => c.Strength == strength),她只提取了與使用者選擇的強度匹配的奶酪。 這給了我們一個新的清單,cheeseByStrength

4. 輸出篩選的奶酪

foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}
foreach (var cheese in cheeseByStrength)
{
    Console.WriteLine($"Name: {cheese.Name} cheese");
}

最後在12:03,為了很好地結束,Layla使用foreach迴圈遍歷Console.WriteLine中指定的謂詞列印出其名稱。 簡單而有效!

在12:17執行程式時,Layla演示了如何讓使用者輸入強度值,並篩選清單以僅顯示具有指定強度的奶酪。 下面顯示了範例輸出:(有更好的圖像嗎?)

範例輸出

結論

Layla的影片有效地介紹了C#清單的概念以及如何使用LINQ查詢它們。 通過遵循她的例子和解釋,初學者可以在使用清單和查詢C#中的資料時獲得堅實的基礎。 欲了解更多細節和現場編程會話,請查看Layla的YouTube頻道並參加她的直播。

請記得探索List類的各種方法和屬性,例如Insert方法、謂詞函式等,以增強您對清單的理解和有效操作能力。

Hero Worlddot related to 理解C#中的列表
Hero Affiliate related to 理解C#中的列表

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話