【C#】IF與Dictionary的Mapping比較

問題

在寫程式中常遇到Mapping,而一開始我都是用IF、Switch等來比較,會發現程式碼非常都長且不優雅。寫了LeetCode後一些集合類型都需要用上。以下例子只是講解if與dictionary兩者比較,當然沒做太多的例子呈現,所以要用哪個方法請自行判斷,方法很多種但需要用在對的事情上 : )

IF與Dictionary比較案例

情境呢,我們就說說例如數字[1]轉國字[一]吧,當然這資料比較算少,比較沒有說服力。在現實世界裡,會遇到龐大資料,這裡我就不說用哪個集合方法比較好,而是遇到什麼樣的事情在做出相對應方法。主要想表達兩者優雅度。

Main

    static void Main(string[] args)
    {
        string res = string.Empty;
        int target = 9;

        Stopwatch sw = new Stopwatch();
        sw.Reset();
        sw.Start();
        res = IfSolution(target);
        sw.Stop();
        string IfSecond = sw.Elapsed.TotalMilliseconds.ToString();

        sw.Reset();
        sw.Start();
        res = DictionarySolution(target);
        sw.Stop();
        string DictionarySecond = sw.Elapsed.TotalMilliseconds.ToString();

        Console.WriteLine($"If總共花費{IfSecond}秒找到{target}({res})");
        Console.WriteLine($"Dictionary總共花費{DictionarySecond}秒找到{target}({res})");
        Console.Read();
    }

IfSolution

    public static string IfSolution(int num)
    {
        if (num == 0) return "零";
        if (num == 1) return "一";
        if (num == 2) return "二";
        if (num == 3) return "三";
        if (num == 4) return "四";
        if (num == 5) return "五";
        if (num == 6) return "六";
        if (num == 7) return "七";
        if (num == 8) return "八";
        if (num == 9) return "九";

        return string.Empty;
    }

DictionarySolution

    public static string DictionarySolution(int num)
    {
        var dict = new Dictionary<int, string>()
        {
             {0, "零"},{1, "一"},{2, "二"},{3, "三"},{4, "四"},
             {5, "五"},{6, "六"},{7, "七"},{8, "八"},{9, "九"}
        };

        string res = string.Empty;
        dict.TryGetValue(num, out res);

        return res;
    }

執行五次所花費時間

If總共花費0.2695秒找到9(九)
Dictionary總共花費0.3656秒找到9(九)

If總共花費0.3785秒找到9(九)
Dictionary總共花費0.2875秒找到9(九)

If總共花費0.1898秒找到9(九)
Dictionary總共花費0.2199秒找到9(九)

If總共花費0.2701秒找到9(九)
Dictionary總共花費0.3236秒找到9(九)

If總共花費0.2346秒找到9(九)
Dictionary總共花費0.1968秒找到9(九)

結論

兩者比較看來還是傾向使用Dictionary方法,因資料小看不出差異點,實驗數據看看即可。

但越大資料上Dictionary會比較好,在查找效率上是O(1),Dictionary內部結構上也是採用HashTable方式。