iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Software Development

C# 學習之路系列 第 10

[DAY9] C#基礎與實作(Dictionary)

  • 分享至 

  • xImage
  •  

C# 程式基礎

Dictionary(字典):

  • 使用 Dictionary<TKey, TValue> 類別,其中 TKey 表示鍵(Key)的類型,TValue 表示值(Value)的類型。
  • 每個鍵(Key)必須是唯一的。
  • 使用 Dictionary,需要引入 System.Collections.Generic 命名空間。
  • 鍵不能為空引用null,若值為引用類型,則可以為空值
  • Key和Value可以是任何型別(string,int,custom class 等)

初始化Dictionary:

  • 直接創建:
    • 程式範例:
        Dictionary<int, string> dict = new Dictionary<int, string>();
    
  • 在建立 Dictionary 時就賦值:
    • 程式範例:
        Dictionary<int, string> dict2 = new Dictionary<int, string>{
            [1] = "C#",
            [2] = "C++"
        };
    

計算Dictionary長度:

  • 程式範例:
        Console.WriteLine( "dict總長度:" + dict.Count ); 
        // dict總長度:0
    

添加值到Dictionary:

  • 添加單一值
    • 程式範例:
        dict.Add(1,"C#");
        dict.Add(2,"C++");
        Console.WriteLine(dict[1]); // C#
        Console.WriteLine(dict[2]); // C++
    

更新Dictionary的值:

  • 程式範例:
        dict[2] = "Python";
        Console.WriteLine(dict[2]); // Python
    

尋找Dictionary:

  • 通過Key尋找
    • 程式範例:
        if(dict.ContainsKey(1)){
            Console.WriteLine("Key:{0},Value:{1}","1", dict[1]);
        }
    
  • 通過Value尋找
    • 程式範例:
        if(dict.ContainsValue("C#")){
            Console.WriteLine("C# in dict1");
        }
    

遍歷:

  • 通過KeyValuePair遍歷

    • 程式範例:
        foreach(KeyValuePair<int,string>item in dict)
        {
            Console.WriteLine("Key = {0}, Value = {1}"
                                ,item.Key, item.Value);
        }
        //Key = 1, Value = C#
        //Key = 2, Value = Python
    
  • 取得所有的 Keys

    • 程式範例:
        Dictionary<int, string>.KeyCollection keys = dict.Keys;
        foreach (int key in keys)
        {
            Console.WriteLine(key);
        }
    
  • 取得所有的 Values

    • 程式範例:
        Dictionary<int, string>.ValueCollection values = dict.Values;
        foreach (string v in values)
            { Console.WriteLine(v); }
    

刪除:

  • 通過Remove方法移除指定的键值
    • 程式範例:
        dict.Remove(1);
        if(!dict.ContainsKey(1)){
            Console.WriteLine("duct[1] not in dict1"); 
            // duct[1] not in dict1
        }
    
  • 通過Clear方法移除所有
    • 程式範例:
        dict.Clear();
        Console.WriteLine( "dict總長度:" + dict.Count ); 
        // dict總長度:0
    

程式實作練習:

* 程式範例:
    ```
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text.RegularExpressions;

        namespace Rextester
        {
            public class Program
            {
                public static void Main(string[] args)
                {
                    Dictionary<int, string> dict = new Dictionary<int, string>();
                    Console.WriteLine( "dict總長度:" + dict.Count ); 
                    Console.WriteLine("==========");
                    dict.Add(1,"C#");
                    dict.Add(2,"C++");
                    Console.WriteLine(dict[1]);
                    Console.WriteLine(dict[2]);

                    foreach (var items in dict) 
                    {
                        Console.WriteLine(items.Key + ": " + items.Value);
                    }
                    Console.WriteLine("==========");

                    if(dict.ContainsKey(1)){
                        Console.WriteLine("Key:{0},Value:{1}","1", dict[1]);
                     }
                    Console.WriteLine("==========");
                     if(dict.ContainsValue("C#")){
                        Console.WriteLine("C# in dict1");
                     }
                    Console.WriteLine("==========");
                    string value = dict[1];
                    Console.WriteLine(value); // C#

                    Console.WriteLine("==========");
                    dict[2] = "Python";
                    Console.WriteLine(dict[2]); // Python
                    Console.WriteLine("==========");

                    foreach(KeyValuePair<int,string>item in dict)
                    {
                        Console.WriteLine("Key = {0}, Value = {1}",item.Key, item.Value);
                    }
                    Console.WriteLine("==========");

                    Dictionary<int, string>.KeyCollection keys = dict.Keys;
                    foreach (int key in keys)
                    {
                        Console.WriteLine(key);
                    }
                    Console.WriteLine("==========");

                    Dictionary<int, string>.ValueCollection values = dict.Values;
                    foreach (string v in values)
                    {
                        Console.WriteLine(v);
                    }
                    Console.WriteLine("==========");
                }
            }
        }
    ```
    
* 輸出結果
    ```
    dict總長度:0
    ==========
    C#
    C++
    1: C#
    2: C++
    ==========
    Key:1,Value:C#
    ==========
    C# in dict1
    ==========
    C#
    ==========
    Python
    ==========
    Key = 1, Value = C#
    Key = 2, Value = Python
    ==========
    1
    2
    ==========
    C#
    Python
    ==========
    ```

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. C# Dictionary(字典)的用法
  5. rextester compile c# online

期望挑戰30天持續更新成功 ~ DAY9


上一篇
[DAY8] C#基礎與實作(List)
下一篇
[DAY10] C#基礎與實作(委派. 事件)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言