練習 - 開始使用陣列基本知識

已完成

陣列可用來將相同型別的多個值儲存在單一變數中。 儲存在陣列中的值通常相關。 例如,學生名單可能儲存在名為 students 的字串陣列中。

您在安全性部門中的工作主要在於找出詐騙訂單的模式。 您希望程式碼檢閱過去的客戶訂單,找出與詐騙訂單有關的標記。 貴公司希望日後能透過這些標記,在處理訂單前識別可能的詐騙訂購單。 由於未必能預先知道有多少訂單需要檢閱,因此無法建立個別變數來保存每個訂單識別碼。 您該如何建立資料結構來保存多個彼此相關的值?

在本練習中,您會用陣列儲存並分析一連串訂單識別碼。

什麼是陣列?

陣列是個別資料元素的序列,可透過單一變數名稱存取。 您會使用以零為基礎的數值索引來存取陣列中的每個元素。 如您所見,陣列可讓我們將具有相同用途或特徵的類似資料收集為單一資料結構以便處理。

宣告陣列並存取陣列元素

陣列是特殊類型的變數,可保存相同資料類型的多個值。 宣告語法稍有不同,因為您必須同時指定資料類型和陣列大小。

準備您的撰寫程式碼環境

本課程模組包含活動,引導您完成建置和執行範例程式代碼的程式。 鼓勵您使用 Visual Studio Code 做為開發環境來完成這些活動。 針對這些活動使用 Visual Studio Code,可協助您更熟悉在全球專業人員使用的開發人員環境中撰寫及執行程式碼。

  1. 打開 Visual Studio Code。

    您可以使用 Windows [開始] 功能表 (或另一個作業系統的對等資源) 來開啟 Visual Studio Code。

  2. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [開啟資料夾]。

  3. 在 [開啟資料夾] 對話方塊中,瀏覽至 Windows Desktop 資料夾。

    如果您在不同的資料夾位置中保留程式碼專案,您可以改用該資料夾位置。 針對本訓練,請務必使用容易找到並記住的位置。

  4. 在 [開啟資料夾] 對話方塊中,選取 [選取資料夾]。

    如果您看到詢問您是否信任作者的安全性對話方塊,請選取 [是]。

  5. 在 Visual Studio Code 的 [終端] 功能表上,選取 [新增終端]。

    請注意,終端面板中的命令提示字元會顯示目前資料夾的資料夾路徑。 例如:

    C:\Users\someuser\Desktop>
    

    注意

    如果您是在自己的電腦上工作,而不是在沙箱或託管環境中工作,且您已完成此 C# 系列中的其他 Microsoft Learn 課程模組,您可能已針對程式碼範例建立專案資料夾。 如果是這種情況,您可以略過下一個步驟,這個步驟會用來在 TestProject 資料夾中建立主控台應用程式。

  6. 在終端的命令提示字元中,若要在指定的資料夾建立新的主控台應用程式,請輸入 dotnet new console -o ./CsharpProjects/TestProject 並按下 Enter 鍵。

    這個 .NET CLI 命令會使用 .NET 程式範本,在指定的資料夾位置中建立新的 C# 主控台應用程式專案。 這個命令會為您建立 CsharpProjectsTestProject 資料夾,並使用 TestProject 做為 .csproj 檔案的名稱。

  7. 在 [總管] 面板中,展開 CsharpProjects 資料夾。

    您應該會看到 TestProject 資料夾和兩個檔案:名為 Program.cs 的 C# 應用程式檔案,以及名為 TestProject.csproj 的 C# 專案檔。

  8. 在 [總管] 面板中,若要在 [編輯器] 面板中檢視程式碼檔案,請選取 [Program.cs]。

  9. 刪除現有的程式碼。

    您可使用此 C# 主控台專案,在本課程模組期間建立、組建及執行程式碼範例。

  10. 關閉 [終端] 面板。

宣告新的陣列

  1. 若要宣告可保存三個元素的新字串陣列,請輸入下列程式碼:

    string[] fraudulentOrderIDs = new string[3];
    
  2. 花幾分鐘檢查您的程式碼。

    new 運算子會在電腦的記憶體中建立陣列的新執行個體,以保存三個字串值。 如需 new 關鍵字的詳細資訊,請參閱<Call methods from the .NET Class Library using C#>(使用 C# 從 .NET Class Library 呼叫方法) 課程模組。

    請注意,第一組方括弧 [] 只會告訴編譯器名為 fraudulentOrderIDs 的變數是陣列,但第二組方括弧 [3] 則會指出該陣列可保存的元素數目。

    注意

    此範例示範如何宣告字串陣列,但您仍可建立所有資料類型的陣列,包括 intbool 類的基本型別,以及更複雜的資料類型 (例如類別)。 此範例會使用字串的簡單性來將您在入門時所需了解的新想法數目降至最低。

將值指派至陣列的元素

此時,您已宣告字串陣列,但陣列的每個元素都是空的。 若要存取陣列的元素,您會使用位於方括弧內以零為基礎的數值索引。 您可用 = 將值指派至陣列元素,與一般變數一致。

  1. 若要將訂單識別碼的值指派給 fraudulentOrderIDs 陣列,請更新您的程式碼,如下所示:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    
  2. 花幾分鐘檢查您的程式碼。

    請注意,您正在使用陣列名稱存取陣列元素。 每個元素都是透過方括弧內指定以零起始的索引編號來個別存取。

    由於陣列宣告為字串,因此指派的值也必須是字串。 在此情節中,您將訂單識別碼指派給陣列的元素。

嘗試使用超出陣列界限的索引

乍看之下,這可能不太合理,但請務必記得您是要宣告陣列中元素的計數。 不過,您會從零開始存取陣列的每個元素。 因此,若要存取陣列中的第二個項目,請使用索引 1

初學者經常會忘記陣列是以零為基礎,而嘗試存取不存在的陣列元素。 若是如此,則會發生執行階段例外狀況,告訴您嘗試存取的元素超出陣列界限之外。

若要刻意「中斷」應用程式,請嘗試使用索引值 3 來存取陣列的第四個元素。

  1. 在程式碼檔案底部,輸入下列程式碼:

    fraudulentOrderIDs[3] = "D000";
    
  2. 確定您的程式碼符合以下範例:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    fraudulentOrderIDs[3] = "D000";
    
  3. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。

  4. 在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。

    [終端] 窗格應該開啟,且應包含命令提示字元,其中顯示已對 TestProject 資料夾位置開啟終端。

  5. 在終端命令提示字元中,若要編譯程式碼,請輸入 dotnet build,然後按 Enter 鍵。

    您應該會看到下列訊息:

    Build succeeded.        
        0 Warning(s)        
        0 Error(s)
    
  6. 在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。

    執行應用程式時,您會收到下列執行階段錯誤訊息:

    Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.     
       at Program.<Main>$(String[] args) in C:\Users\someuser\Desktop\CsharpProjects\TestProject\Program.cs:line 6
    

    請注意下列錯誤部分:

    • 錯誤訊息:System.IndexOutOfRangeException: Index was outside the bounds of the array.
    • 錯誤位置:Program.cs:line 6
  7. 將產生執行階段錯誤的行註解化。

    // fraudulentOrderIDs[3] = "D000";
    

您已了解如何將值指派給陣列元素。 現在我們來看看如何存取儲存在陣列元素中的值。

從陣列元素擷取值

存取陣列元素值的運作方式,與將值指派給陣列元素的方法相同。 您只需指定要擷取其值的元素索引。

  1. 若要寫入各詐騙訂單識別碼的值,請更新您的程式碼,如下所示:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
  2. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。

  3. 在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。

  4. 在終端機命令提示字元中輸入 dotnet run,然後按 Enter 鍵。

    您應該會看到下列訊息:

    First: A123
    Second: B456
    Third: C789
    

重新指派陣列的值

陣列的元素跟其他任何變數值一樣。 您可以將值指派、擷取及重新指派給陣列的每個元素。

  1. 在程式碼檔案結尾,若要重新指派並列印第一個陣列元素的值,請輸入下列程式碼:

    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  2. 確定您的程式碼符合下列範例:

    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  3. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。

  4. 在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。

  5. 在終端機命令提示字元中輸入 dotnet run,然後按 Enter 鍵。

    您應該會看到下列訊息:

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    

初始化陣列

您可以在宣告期間初始化陣列,跟一般變數一樣。 不過,若要初始化陣列元素,請使用具有大括弧的特殊語法。

  1. 將宣告 fraudulentOrderIDs 變數的行註解化。

    您可以用多行註解 (/* ... */) 註解化 fraudulentOrderIDs 的宣告和用來將值指派給陣列元素的行。

  2. 若要在單一陳述式中宣告陣列初始化的值,請輸入下列程式碼:

    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
  3. 確定您的程式碼符合下列範例:

    /*
    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    */
    
    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
  4. 花點時間檢查宣告陳述式。

    請注意,此語法應精簡且容易閱讀。 執行應用程式時,輸出應不會有任何變更。

  5. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。

  6. 在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。

  7. 在終端機命令提示字元中輸入 dotnet run,然後按 Enter 鍵。

    您應該會看到與之前相同的訊息:

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    

使用陣列的 Length 屬性

視陣列的建立方式而定,您可能無法預先知道陣列包含的元素數目。 若要判斷陣列的大小,您可以使用 Length 屬性。

注意

陣列的 Length 屬性不是以零起始。

  1. 在程式碼檔案結尾,若要報告詐騙訂單的數目,請輸入下列程式碼:

    Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");
    

    此程式碼會使用陣列的 Length 屬性整數,傳回 fraudulentOrderIDs 陣列的元素數目。

  2. 確定您的程式碼符合以下範例:

    /*
    string[] fraudulentOrderIDs = new string[3];
    
    fraudulentOrderIDs[0] = "A123";
    fraudulentOrderIDs[1] = "B456";
    fraudulentOrderIDs[2] = "C789";
    // fraudulentOrderIDs[3] = "D000";
    */
    
    string[] fraudulentOrderIDs = { "A123", "B456", "C789" };
    
    Console.WriteLine($"First: {fraudulentOrderIDs[0]}");
    Console.WriteLine($"Second: {fraudulentOrderIDs[1]}");
    Console.WriteLine($"Third: {fraudulentOrderIDs[2]}");
    
    fraudulentOrderIDs[0] = "F000";
    
    Console.WriteLine($"Reassign First: {fraudulentOrderIDs[0]}");
    
    Console.WriteLine($"There are {fraudulentOrderIDs.Length} fraudulent orders to process.");
    
  3. 將變更儲存至 Program.cs 檔案,然後執行應用程式。

    您應該會看見下列輸出:

    First: A123
    Second: B456
    Third: C789
    Reassign First: F000
    There are 3 fraudulent orders to process.
    

概括回顧

以下是處理陣列時最需要記得的重點:

  • 陣列是能保存相關資料元素序列的特殊變數。
  • 您應該記住陣列變數宣告的基本格式。
  • 存取陣列的每個元素,以透過用方括弧括住、以零為基礎的索引來設定或取得其值。
  • 如果您嘗試存取超出陣列界限的索引,則會收到執行階段例外狀況。
  • Length 屬性能讓您以程式設計方式判斷陣列中元素的數目。

檢定您的知識

1.

什麼是陣列?

2.

下列何者是建立陣列並將其初始化的正確範例?