C# 入門指南
單元 8 - 陣列與字串
陣列 (array) 可以含有多筆資料,每一筆資料稱之為元素 (element) ,陣列中的元素必須是相同的資料型態 (data type) ,對處理資料 (data) 而言,陣列是很好用也很常用的資料結構 (data structure)
陣列型態名稱為 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) ,如下表
逸出序列 | 名稱 |
---|---|
\' | 單引號 |
\" | 雙引號 |
\\ | 反斜線 |
\0 | Null |
\a | 警示 |
\b | 退格鍵 |
\f | 換頁字元 |
\n | 換行 |
\r | 歸位字元 |
\t | 水平 |
\v | 垂直 |
因此像是字串中有 \n 就會自動換行,例如
"a\nb\nc"
印出以上字串會得到 a 、 b 、 c 各一行。
如果字串以小老鼠符號開頭,像是 @"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 具有屬性 kg 與 price ,屬性值就是冒號後的整數。
第二種用在 WriteLine() 方法 (method) 中,第一個參數 (parameter) 為字串,裡面 {0} 對應到第二個參數, {1} 對應到第三個參數,以此類推
Console.WriteLine("香蕉{0}斤{1}元", 10, 1);
陣列與字串在 C# 中都很常用,下一單元繼續介紹一樣很常用的列舉 (enumeration) 及結構 (structure) 。
相關教學影片
中英文術語對照 | |
---|---|
陣列 | 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 ,利用迴圈建立含有整數 1 到 10 的陣列。 |
2. 建立一個新專案 Exercise0802 ,建立儲存九九乘法表的二維陣列。 |
3. 建立一個新專案 Exercise0803 ,比較 @"C:\Users\" 及 "C:\\Users\\" 兩個字串是否相等? |
4. 建立一個新專案 Exercise0804 ,用格式化字串寫一個打招呼程式。 |