C# 快速導覽 - switch 多重選擇

C# 亦有提供多重選擇的控制結構,使用關鍵字 (keyword) switchcasedefault 的陳述 (statement) ,形式如下




簡單來說, switch 後頭接一小括弧,小括弧內為一常數運算式 (expression) ,計算出常數值若與其後 case 的位標 (label) 相符,就會執行該 case 的陳述。 case 的位標也可以是常數運算式,不過通常直接用常數值。


如下列程式,假設有一位元編碼儲存在整數陣列 (array) data 之中,程式累計 0 與 1 各自出現的數目
class Demo {
    static void Main() {
        int[] data = {1, 0 ,0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1};
        int oneCount = 0;
        int zeroCount = 0;
        int i;
    
        for (i = 0; i <= 15; i++) {
            switch (data[i]) {
                case 0:
                    zeroCount++;
                    break;
           
                case 1:
                    oneCount++;
                    break;
            }
        }

        System.Console.WriteLine("0: {0}", zeroCount);
        System.Console.WriteLine("0: {0}", oneCount);
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:switchdemo1.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


編譯執行,結果如下



第 9 行
switch (data[i]) {


data[i] 會取得該陣列的第 i 個元素值,此為常數運算式。


由於情況只有 0 與 1 ,因此上列程式只用 0 與 1 兩個位標。另外第 12 及第 16 行都有
break;


關鍵字 break 是用來暫時中斷程式的執行,放在迴圈內遇到 break 就會跳出迴圈,而在 switch 裡頭的位標後面則是可以不讓程式繼續往下檢查其他的位標,因為檢查到相符的位標,程式即可暫停,若是沒有用 break ,程式會持續執行到右大括弧 } ,也就是 switch 陳述結束的地方,這樣容易增加額外的程式執行時間。


以下程式計算字串中母音字母出現的次數,若非母音字母則用 default 位標執行另外的計算
class Demo {
    static void Main() {
        string saying = "Never put off till tomorrow what you can do today.";
        char[] s = saying.ToCharArray();
        int aV, eV, iV, oV, uV, other, i;
        aV = eV = iV = oV = uV = other = 0;

        for (i = 0; i < saying.Length; i++) {
            switch(s[i]) {
                case 'A':
                case 'a':
                    aV++;
                    break;
                
                case 'E':
                case 'e':
                    eV++;
                    break;
                
                case 'I':
                case 'i':
                    iV++;
                    break;
            
                case 'O': 
                case 'o':
                    oV++;
                    break;
            
                case 'U':
                case 'u':
                    uV++;
                    break;
                
                default:
                    other++;
                    break;
            }
        }

        System.Console.WriteLine("a: {0}", aV);
        System.Console.WriteLine("e: {0}", eV);
        System.Console.WriteLine("i: {0}", iV);
        System.Console.WriteLine("o: {0}", oV);
        System.Console.WriteLine("u: {0}", uV);
        System.Console.WriteLine("other: {0}", other);
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:switchdemo2.cs
    功能:示範 C# 程式 
    作者:張凱慶
    時間:西元 2013 年 6 月 */


編譯執行,結果如下



中英文術語對照
關鍵字keyword
陳述statement
運算式expression
位標label
陣列array


您可以繼續參考
控制結構


相關目錄
回 C# 快速導覽
回 C# 教材
回首頁


參考資料
Standard ECMA-334 C# Language Specification
msdn: switch (C# 參考)

沒有留言: