C# 入門指南

單元 8 - 陣列與字串

~~學習進度表~~

陣列 (array) 可以含有多筆資料,每一筆資料稱之為元素 (element) ,陣列中的元素必須是相同的資料型態 (data type) ,對處理資料 (data) 而言,陣列是很好用也很常用的資料結構 (data structure)

Array, String

陣列型態名稱為 Array ,宣告陣列需要使用型態名稱及中括弧,然後用關鍵字 (keyword) new 與型態名稱加上中括弧,中括弧裡頭要放入元素數量,例如

int[] a = new int[5];

用關鍵字 new 宣告建立整數陣列,裡頭每一個元素會初始化為 0

可以直接用大括弧設定陣列元素,例如以下

int[] a = new int[5] {1, 2, 3, 4, 5};

以上可以少掉 new 的部分,簡寫如下

int[] a = {1, 2, 3, 4, 5};

以下程式示範建立整數陣列後,用 for 迴圈 (loop) 替陣列元素設值,然後再用 foroeach 迴圈逐一取出元素,印在命令列上

using System;

namespace ArrayDemo01
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[5];
            int value = 1;
            for (int i = 0; i < 5; i++)
            {
               a[i] = value++;
            }
            foreach (int i in a)
            {
                Console.WriteLine(i);
            }
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ArrayDemo01
// 檔名:Program.cs
// 功能:示範 C# 的陣列
// 作者:張凱慶

注意 foreach 迴圈的部分

foreach (int i in a)
{
    Console.WriteLine(i);
}

變數 i 會逐一取得整數陣列變數 a 當中的元素,所以變數 i 必須宣告為整數。

執行結果如下

C:\ArrayDemo01> dotnet run
1
2
3
4
5
C:\ArrayDemo01>

陣列可以是多維的,例如

using System;

namespace ArrayDemo02
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] a =  {{1,2}, {3,4}, {5,6}, {7,8}};
            Console.WriteLine(a[1,1]);

            int[, ,] b = {{{1, 2, 3}, {4, 5, 6}}, {{7, 8, 9}, {10, 11, 12}}};
            Console.WriteLine(b[1,1,1]);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:ArrayDemo02
// 檔名:Program.cs
// 功能:示範 C# 的陣列
// 作者:張凱慶

變數 a 為二維陣列,變數 b 為三維陣列,執行結果如下

C:\ArrayDemo02> dotnet run
4
11
C:\ArrayDemo02>

多維陣列的宣告並用關鍵字 new 建立陣列一樣要在中括弧裡寫陣列的元素個素,例如以上二維陣列的宣告為

int[,] a = new int[4, 2];

以上三維陣列的宣告為

int[,] a = new int[2, 2, 3];

字串 (string) 就是文字資料,字面常數為雙引號圍起來的內容,使用關鍵字 string 宣告,例如

string s = "Hello";

字串可以用 foreach 迴圈逐一取得字元 (character) 內容,例如

using System;

namespace StringDemo01
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "Hello";
            foreach (char i in s)
            {
                Console.WriteLine(i);
            }
            Console.WriteLine(s);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:StringDemo01
// 檔名:Program.cs
// 功能:示範 C# 的字串
// 作者:張凱慶

雖然字串與字元陣列很相似,但是兩者是不同型態,字串有 ToCharArray() 方法轉換成字元陣列 (character array) ,字元陣列可以用字串的建構子 (constructor) string() 與關鍵字 new 轉換成字串。

執行結果如下

C:\StringDemo01> dotnet run
H
e
l
l
o
Hello
C:\StringDemo01>

某些特殊符號不能直接寫在字串中,這些要用逸出序列 (escape sequence) ,如下表

逸出序列名稱
\'單引號
\"雙引號
\\反斜線
\0Null
\a警示
\b退格鍵
\f換頁字元
\n換行
\r歸位字元
\t水平
\v垂直

因此像是字串中有 \n 就會自動換行,例如

"a\nb\nc"

印出以上字串會得到 abc 各一行。

如果字串以小老鼠符號開頭,像是 @"a\nb\nc" ,這叫做逐字字串 (verbatim string) ,逐字字串會把逸出序列按照字面意義解釋,例如反斜線 \ 依然是反斜線,兩條反斜線也就是連續兩條反斜線 \\

格式化字串 (format string) 是指在字串中放變數,然後可以依據變數值來決定字串的最終內容,例如

using System;

namespace StringDemo02
{
    class Program
    {
        static void Main(string[] args)
        {
            var banana = (kg: 10, price:1);
            Console.WriteLine($"香蕉{banana.kg}斤{banana.price}元");
            Console.WriteLine("香蕉{0}斤{1}元", 10, 1);
        }
    }
}

//《程式語言教學誌》的範例程式
// http://kaiching.org/
// 專案:StringDemo02
// 檔名:Program.cs
// 功能:示範 C# 的字串
// 作者:張凱慶

執行結果如下

C:\StringDemo02> dotnet run
香蕉10斤1元
香蕉10斤1元
C:\StringDemo02>

格式化字串多種寫法,這裡介紹兩種,第一種變數設定在前,注意這種格式化字串要以 $ 開頭

var banana = (kg: 10, price:1);
Console.WriteLine($"香蕉{banana.kg}斤{banana.price}元");

這裡關鍵字 var 用來設定匿名型態,這讓變數 banana 具有屬性 kgprice ,屬性值就是冒號後的整數。

第二種用在 WriteLine() 方法 (method) 中,第一個參數 (parameter) 為字串,裡面 {0} 對應到第二個參數, {1} 對應到第三個參數,以此類推

Console.WriteLine("香蕉{0}斤{1}元", 10, 1);

陣列與字串在 C# 中都很常用,下一單元繼續介紹一樣很常用的列舉 (enumeration) 及結構 (structure) 。

相關教學影片

上一頁 單元 7 - 迴圈
回 C# 入門指南首頁
下一頁 單元 9 - 列舉與結構
回 C# 教材首頁
回程式語言教材首頁
中英文術語對照
陣列array
字元character
字元陣列character array
建構子constructor
資料data
資料結構data structure
資料型態data type
元素element
逸出序列escape sequence
列舉enumeration
格式化字串format string
關鍵字keyword
迴圈loop
方法method
參數parameter
字串string
結構structure
逐字字串verbatim string
參考資料
1. C# 教學課程 | Microsoft Docs - 陣列
2. C# 教學課程 | Microsoft Docs - 使用字串插補來建構格式化的字串
3. C# 程式設計手冊 | Microsoft Docs - 陣列
4. C# 程式設計手冊 | Microsoft Docs - 字串
重點整理
1. 陣列是一種含有多筆相同資料型態元素的資料結構。
2. 宣告陣列使用型態名稱及中括弧,之後可以直接用大括弧設定陣列元素。
3. foroeach 迴圈可以逐一取出陣列或字串元素。
4. 陣列可以是多維的,也就是陣列以陣列為元素。
5. 字串的型態關鍵字為 string ,並以雙引號為字面常數。
6. 字串的 ToCharArray() 方法可以將字串轉換成字元陣列。
7. 逸出序列為一些不可見符號。
8. 逐字字串為以小老鼠符號開頭的字串。
9. 格式化字串是指在字串中放變數,由變數值來決定字串的最終內容。
問題與討論
1. 為什麼陣列是可以多維的?想一想,多維陣列可以用在什麼地方。
2. 字串與陣列有何不同?可以直接用處理陣列的方式處理字串嗎?
3. 什麼是逐字字串?為什麼要有逐字字串?
4. 為什麼格式化字串要有多種寫法?
練習
1. 建立一個新專案 Exercise0801 ,利用迴圈建立含有整數 110 的陣列。
2. 建立一個新專案 Exercise0802 ,建立儲存九九乘法表的二維陣列。
3. 建立一個新專案 Exercise0803 ,比較 @"C:\Users\""C:\\Users\\" 兩個字串是否相等?
4. 建立一個新專案 Exercise0804 ,用格式化字串寫一個打招呼程式。