跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

理解 C# 陣列

Layla Porter
21m 53s

C#中的陣列是一種基本的資料結構,允許開發者將相同類型的元素集合存儲於連續的記憶體位置。 陣列可以是一維、多維或不規則陣列。

這篇關於C#陣列的文章靈感來自Layla Porter的教育影片,"C# for Beginners Part 5 - Arrays and More Loops." 在她的影片中,Layla深入介紹了陣列的基本概念,並在C#中引入了更多循環技術,為觀眾提供了管理集合和有效迭代數據的基本技能。

理解陣列

Layla從解釋C#中的陣列是固定長度的集合開始。 與某些其他編程語言中可以動態改變大小的陣列不同,C#中的陣列一旦創建就不可變。 這意味著它們的大小在初始化後無法改變,這是由於記憶體分配的限制。

簡易的控制台互動:選擇您的最愛乳酪

在以下代碼中,與陣列相對,Layla(1:50)首先演示了如何向用戶提供一個可以選擇的項目列表。

Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Console.WriteLine("Hello, what is your favourite cheese from this list?");
Console.WriteLine("1. Stilton");
Console.WriteLine("2. Cheddar");
Console.WriteLine("3. Pineapple");
Console.WriteLine("4. Brie");
var favouriteCheese = Console.ReadLine();
Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

此代碼首先使用Console.WriteLine在控制台中打印一條消息,詢問用戶他們最喜歡的乳酪是什麼。 然後,它使用Console.WriteLine再打印四次乳酪列表於控制台上。 接著,代碼使用favouriteCheese中。 最後,代碼再次使用Console.WriteLine打印一條包含用戶最愛乳酪的消息到控制台。

Layla於2:04執行此代碼以展示其工作原理:

Understanding Csharp Arrays 1 related to 簡易的控制台互動:選擇您的最愛乳酪

聲明陣列 - 陣列初始化

為了說明,Layla首先示範如何聲明並初始化一個字串陣列,即最初呈現給用戶作為菜單的乳酪列表。 她介紹了用於定義一維陣列的語法(2:30)以及如何使用大括號(2:54)填入初始值。

string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };
string[] cheeses = { "Brie", "Cheddar", "Stilton", "Gouda" };

她強調了陣列中的零基索引的重要性,在單維陣列中,第一個元素使用索引0來訪問。接下來,Layla展示了如何使用for循環迭代陣列。這種循環結構在編程中至關重要,因為它允許根據指定條件重複執行代碼。

實作循環

轉到循環,Layla介紹了具有三個基本組件的for循環:初始化程序、條件和迭代器。 此循環用於根據陣列的長度迭代其元素。

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(cheeses[i]);
}
for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(cheeses[i]);
}

她在4:44強調cheeses.Length提供了陣列中的元素數量,確保循環精確地遍歷每個元素。 變量i作為索引變量,用於遍歷索引。 這有效地逐一打印出個別的陣列元素,而毋需多次撰寫Console.WriteLine方法,如上所示不需訪問陣列元素。 Layla於6:17運行應用程序以展示該for循環的輸出與前面的範例完全相同:

Understanding Csharp Arrays 2 related to 實作循環

排序和可變性

Layla解釋了排序的好處,然後在7:17展示了如何使用Sort方法按字母順序排序陣列,並警告說由於C#中陣列的不可變性,排序實際上會在背後創建一個新的陣列。 這是了解資料操作如何影響記憶體和性能的一個關鍵點。

Array.Sort(cheeses);
Array.Sort(cheeses);

她還展示了如何直接修改陣列中的個別元素而不用創建新陣列(8:10),說明了在不可變性中的可變性。 要替換的元素的索引在cheeses陣列變數後用方括號傳遞:

cheeses[0] = "Roquefort";
cheeses[0] = "Roquefort";

這將把索引0位置上的陣列元素"Brie"替換為新值"Roquefort"。

更新乳酪清單:處理新條目(8:46)

Layla解釋了如何將值附加到現有清單中。這涉及到採用現有的值和新值,然後創建一個包含兩者的新陣列,並更新我們的引用以指向這個新的陣列。 以下代碼展示了它如何運作:

var favouriteCheese = Console.ReadLine();

bool containsFavourite = false;

foreach (var cheese in cheeses)
{
    if (favouriteCheese == cheese)
    {
        containsFavourite = true;
    }
}

if (!containsFavourite)
{
    cheeses = cheeses.Append(favouriteCheese).ToArray();
}
var favouriteCheese = Console.ReadLine();

bool containsFavourite = false;

foreach (var cheese in cheeses)
{
    if (favouriteCheese == cheese)
    {
        containsFavourite = true;
    }
}

if (!containsFavourite)
{
    cheeses = cheeses.Append(favouriteCheese).ToArray();
}

這個例子使用基本的陣列操作和System.Linq中將其(13:33)附加到陣列中。

Layla於13:50表示,代碼出錯是因為IEnumerable,它是集合的一個接口。 為了解決這個問題,我們使用cheeses。 Layla注意到,黃色波浪線是編譯器警告表示潛在問題,例如favouriteCheese可能為null,但我們在此演示中忽略了安全檢查。

更新並打印乳酪清單

Layla解釋,一旦我們將新項目加入陣列中,就應該打印更新的清單到螢幕上。 為了達成這一點,我們使用for循環,打印每個元素及其索引,以顯示陣列中現在包含更多項目。

Console.WriteLine("The new list:");

for (var i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(i + " " + cheeses[i]);
}

Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");
Console.WriteLine("The new list:");

for (var i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine(i + " " + cheeses[i]);
}

Console.WriteLine($"Here is a lump of {favouriteCheese} cheese!");

這展示了C#中陣列的動態特性,說明了如何加入新元素,並且透過打印陣列的內容來驗證更新。

Layla接著運行應用程序以顯示新加入的乳酪(15:19):

Understanding Csharp Arrays 3 related to 更新並打印乳酪清單

增強對象陣列的使用

為了擴展理解,Layla透過創建包含Cheese類來引進對象的陣列(16:14)。 然後她用Cheese對象陣列取代了字串列表,並演示了如何在迭代中訪問對象內的屬性(17:46)。

class Cheese
{
    public string Name { get; set; }
    public int Strength { get; set; }

    public Cheese(string name, int strength)
    {
        Name = name;
        Strength = strength;
    }
}

Cheese[] cheeses = new Cheese[]
{
    new Cheese("Stilton", 3),
    new Cheese("Cheddar", 2),
    new Cheese("Pineapple", 1),
    new Cheese("Brie", 2)
};

cheeses[0] = new Cheese("Roquefort", 4);
class Cheese
{
    public string Name { get; set; }
    public int Strength { get; set; }

    public Cheese(string name, int strength)
    {
        Name = name;
        Strength = strength;
    }
}

Cheese[] cheeses = new Cheese[]
{
    new Cheese("Stilton", 3),
    new Cheese("Cheddar", 2),
    new Cheese("Pineapple", 1),
    new Cheese("Brie", 2)
};

cheeses[0] = new Cheese("Roquefort", 4);

這部分提供了關於陣列如何封裝複雜數據結構的基礎知識,提供了編程中的靈活性和力量。

在循環中使用乳酪對象

Layla現在展示了如何將更新的列表中所有元素打印到螢幕上。 在此場景中,每個乳酪被作為具有Strength屬性的對象表示。 Cheese對象陣列, 每次迭代直接處理單一陣列元素。

for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}
for (int i = 0; i < cheeses.Length; i++)
{
    Console.WriteLine($"{cheeses[i].Name}, Strength: {cheeses[i].Strength}");
}

這個循環簡化了存儲在Cheese對象屬性的訪問。 Layla於20:34運行程序,輸出如下:

Understanding Csharp Arrays 4 related to 在循環中使用乳酪對象

結論

總結來說,Layla Porter關於C#中的陣列和循環的教學為初學者提供了理解這些基本概念的堅實基礎。通過掌握陣列和各種循環結構,志向成為C#開發者的學習者可以有效地在程序中操作數據結構並遍歷集合。 理解這些基礎對於構建更複雜的應用程序及探索C#編程的進一步方面至關重要。

通過遵循Layla的範例和解釋,初學者可以在他們自己的C#專案中有效使用陣列和循環並增強自信。 若需更深入瞭解C#集合及進階的二維和不規則陣列,學習者被鼓勵去探索後續的教程和實際練習。

Hero Worlddot related to 理解 C# 陣列
Hero Affiliate related to 理解 C# 陣列

通過分享您所愛的東西賺得更多

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

鋼鐵支援團隊

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