IRONSOFTWAREHOME

理解C#中的陣列

理解 C# 陣列:Layla Porter 的有關 C# 陣列與迴圈的影片見解

Layla Porter

21m 53s

C# 中的陣列是一種基本的資料結構,允許開發人員將同型別的元素集合儲存在連續的記憶體位置中。 陣列可以是一維的、多維的或巢狀的。

這篇有關 C# 陣列的文章受到 Layla Porter 的教育影片《C# 初學者入門第五部分 - 陣列與更多迴圈。》的啟發。在她的影片中,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 向控制台印出一條消息,詢問使用者他們最喜歡的起司是什麼。 然後,它再使用 Console.WriteLine 四次以上將起司列表印到控制台。 程式碼接著使用 Console.ReadLine 從控制台中讀取使用者的輸入並將其儲存在變數 favouriteCheese 中。 最後,程式碼再次使用 Console.WriteLine 向控制台印出一條包含使用者喜愛的起司的消息。

Layla 在 2:04 時執行此程式碼以展示其工作原理:

宣告陣列 - 陣列初始化

為了說明,Layla 首先演示如何宣告和初始化一個字串陣列,在此例中是一個最初呈現給使用者的起司清單。 她介紹了一維陣列的定義語法(2:30),並使用大括號將其用初始值填充(2:54)。

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

她強調了陣列中基於零的索引法的重要性,其中在單一維度陣列中的第一個元素使用索引 0 存取。隨後,Layla 繼續展示如何使用 for 迴圈迭代陣列。這種迴圈結構在程式化中至關重要,因為它允許根據指定條件重複執行程式碼。

實作迴圈

在進入迴圈主題時,Layla 介紹了帶有三個基本組成部分的 for 迴圈:初始化、條件和迴圈終止。 此迴圈用於根據陣列的長度迭代其元素。

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

她在 4:44 時強調,cheeses.Length 給出陣列中的元素數,確保迴圈精確地遍歷每一個元素。 變數 i 作為迴圈指標變數,用於通過索引進行迭代。 這有效地印出單個陣列元素,而不必多次編寫 Console.WriteLine 方法,如上所示而不具存取陣列元素。 Layla 於 6:17 執行應用程式,以顯示此 for 迴圈的輸出與上例完全相同:

排序與不變性

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

Array.Sort(cheeses);

她還展示如何直接修改陣列中的個別元素而不建立新陣列(8:10),說明在不變性中的可變性。 要取代的元素索引位於 cheeses 陣列變數後的方括號中:

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();
}

此例子展示了使用基本陣列操作和 foreach 迴圈簡化操作過程,以檢查起司是否已在列表中。如果沒有,Layla 在 13:33 使用來自 System.LinqAppend 方法將其附加到陣列中。

Layla 在 13:50 時表示,程式碼出錯的原因是 cheesesAppend 的結果是不同型別。Append 返回一個 IEnumerable,它是一個針對集合的介面。 要修復此問題,我們使用 ToArray() 方法將 IEnumerable 轉換為一個陣列,然後將它賦值回 cheeses。 Layla 提到黃色波浪線是編譯器警告,表明潛在問題,例如 favouriteCheese 為空,但我們在本次演示中忽略了安全檢查。

更新並印出起司清單

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!");

這展示了 C# 中陣列的動態性,顯示如何新增元素並通過印出陣列內容來驗證更新。

Layla 然後運行應用程式以顯示新新增的起司 (15:19):

使用物件陣列增強功能

為了擴展理解,Layla 通過建立一個帶有 NameStrength 屬性 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);

這一部分提供了如何使用陣列封裝複雜資料結構的基礎理解,提供在程式設計中靈活性和能力。

在迴圈中使用起司物件

Layla 現在展示如何將更新的清單中的所有元素印到螢幕上。 在此場景中,每個起司以具有 NameStrength 屬性的物件表示。 for 迴圈在此 Cheese 物件的陣列中迭代,每次迭代直接處理一個陣列元素。

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

此迴圈簡化了存取儲存在 cheeses 陣列中 Cheese 物件屬性的操作。 Layla 在 20:34 時運行程式,輸出如下:

結論

總而言之,Layla Porter 的有關 C# 中的陣列與迴圈 的教學為初學者打下了良好基礎,讓他們理解這些基本概念。通過掌握陣列和各種迴圈結構,正在學習 C# 的開發者可以在他們的程式中有效地操控資料結構並迭代集合。 理解這些基本點對於建構更複雜的應用程式和探討 C# 程式設計的進一步面向至關重要。

通過遵循 Layla 的例子和解釋,初學者能夠在自己的 C# 專案中有效地使用陣列和迴圈,增強信心。 為了深入學習 C# 中集合和進階的二維與巢狀陣列,建議學習者探索後續的教學和實踐練習。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立