C# Dictionary 9가지 사용법, 딕셔너리 예제

C# Dictionary 12가지 사용법, 딕셔너리 예제


Dictionary에 키값 4개를 추가한 뒤 비주얼 스튜디오 디버거를 통해 내용을 확인합니다. Dictionary는 키와 값을 쌍으로 보유합니다.


string, int : 다른 자료형을 요소로 사용합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        Dictionary<stringint> dictionary =
            new Dictionary<stringint>();
 
        dictionary.Add("cat"2);
        dictionary.Add("dog"1);
        dictionary.Add("llama"0);
        dictionary.Add("iguana"-1);
    }
}
cs


Dictionary - string int[C# 딕셔너리] 예제 소스


디버거를 통해 확인해 보면, key value 쌍들의 집합이 보입니다. 전형적인 KeyValuePair 구조체죠.

ContainsKey. 주어진 문자열이 Dictionary에 존재하는 경우 true, 없으면 false가 리턴됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        Dictionary<stringint> dictionary =
            new Dictionary<stringint>();
 
        dictionary.Add("apple"1);
        dictionary.Add("windows"5);
 
        // See whether Dictionary contains this string.
        if (dictionary.ContainsKey("apple"))
        {
            int value = dictionary["apple"];
            Console.WriteLine(value);
        }
 
        // See whether it contains this string.
        if (!dictionary.ContainsKey("acorn"))
        {
            Console.WriteLine(false);
        }
    }
}
cs


Dictionary - ContainsKey[C# 딕셔너리] 예제 소스


TryGetValue. 효율적인 검색 방법입니다. TryGetValue란 이름에서도 보이듯 키를 통해 값을 반환합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        Dictionary<stringstring> values =
            new Dictionary<stringstring>();
 
        values.Add("cat""feline");
        values.Add("dog""canine");
        // Use TryGetValue.
        string test;
        if (values.TryGetValue("cat", out test)) // Returns true.
        {
            Console.WriteLine(test); // This is the value at cat.
        }
        if (values.TryGetValue("bird", out test)) // Returns false.
        {
            Console.WriteLine(false); // Not reached.
        }
    }
}
cs


Dictionary - TryGetValue[C# 딕셔너리] 예제 소스


TryGetValue 사용 방법 2. 이 함수 호출 시 out 키워드를 사용해도 위와 같은 효과를 낼 수 있습니다.

단, 비주얼 스튜디오 2017 이상에서 실행되는 코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        var values = new Dictionary<stringstring>();
        values.Add("A""uppercase letter A");
        values.Add("c""lowercase letter C");
 
        // Use inline "out string" with TryGetValue.
        if (values.TryGetValue("c", out string description))
        {
            System.Console.WriteLine(description);
        }
    }
}
cs


Dictionary - TryGetValue 2[C# 딕셔너리] 예제 소스

KeyValuePair. IDictionary 컬렉션을 상속받기에 루프에서 사용할 땐 KeyValuePair 구조체를 이용합니다.


KeyNotFoundException. 존재하지 않는 키를 사용하면 에러가 발생합니다. 항상 ContainsKey나 TryGetValue로 키 존재 여부를 먼저 확인합니다.


닷넷 프레임워크 씨샵[C# 딕셔너리] 예제 소스

 

Loop. Dictionary의 자료 유형을 몰라도 콘솔로 확인할 수 있습니다. 아래 예제는 string 키와 int 값입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        // Example Dictionary again.
        Dictionary<stringint> d = new Dictionary<stringint>()
        {
            {"cat"2},
            {"dog"1},
            {"llama"0},
            {"iguana"-1}
        };
 
        // Loop over pairs with foreach.
        foreach (KeyValuePair<stringint> pair in d)
        {
            Console.WriteLine("{0}, {1}"pair.Key, pair.Value);
        }
 
        // Use var keyword to enumerate dictionary.
        foreach (var pair in d)
        {
            Console.WriteLine("{0}, {1}"pair.Key, pair.Value);
        }
    }
}
 
cs


Dictionary - KeyValuePair[C# 딕셔너리] 예제 소스


Var 키워드. 위의 예제 마지막에선 var를 사용해 코드 양을 조금 줄였습니다. var를 이용하면 조금 수월합니다.


Key. 키를 이용해 값을 조회하는 예제입니다. 이 방법은 당연히 느립니다. 예제용 소스입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        Dictionary<stringint> d = new Dictionary<stringint>()
        {
            {"cat"2},
            {"dog"1},
            {"llama"0},
            {"iguana"-1}
        };
 
        // Store keys in a List.
        List<string> list = new List<string>(d.Keys);
 
        // Loop through list.
        foreach (string k in list)
        {
            Console.WriteLine("{0}, {1}", k, d[k]);
        }
    }
}
cs


Dictionary - KeyNotFoundException[C# 딕셔너리] 예제 소스


Foreach 성능. 루프에서 KeyValuePairs 방법과 키를 이용한 방법의 시간을 비교합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Collections.Generic;
using System.Diagnostics;
 
class Program
{
    static void Main()
    {
        var test = new Dictionary<stringint>();
        test["bird"= 10;
        test["frog"= 20;
        test["cat"= 60;
 
        int sum = 0;
        const int _max = 1000000;
 
        // Version 1: use foreach loop directly on Dictionary.
        var s1 = Stopwatch.StartNew();
 
        for (int i = 0; i < _max; i++)
        {
            foreach (var pair in test)
            {
                sum += pair.Value;
            }
        }
 
        s1.Stop();
 
        // Version 2: use foreach loop on Keys, then access values.
        var s2 = Stopwatch.StartNew();
        for (int i = 0; i < _max; i++)
        {
            foreach (var key in test.Keys)
            {
                sum += test[key];
            }
        }
        s2.Stop();
        Console.WriteLine(s1.Elapsed.TotalMilliseconds);
        Console.WriteLine(s2.Elapsed.TotalMilliseconds);
    }
}
cs


Dictionary - Var keyword[C# 딕셔너리] 예제 소스

Sort. Dictionary를 직접 정렬할 순 없습니다. 키를 이용해 다른 컬렉션을 만들어 정렬할 순 있죠.


Type. Dictionary도 일반적인 클래스입니다. 사용하려면 키와 값의 자료형을 지정해야 합니다. 값은 어떤 유형이라도 허용합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        // Use a Dictionary with an int key.
        Dictionary<intstring> dict = new Dictionary<intstring>();
        dict.Add(100"Bill");
        dict.Add(200"Steve");
 
        // We can look up the int in the Dictionary.
        if (dict.ContainsKey(200))
        {
            Console.WriteLine(true);
        }
    }
}
cs


Dictionary - foreach[C# 딕셔너리] 예제 소스


LINQ. Dictionary 확장 함수인 ToDictionary를 이용할 수 있습니다. ToDictionary는 System.Linq에서 제공합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
using System.Collections.Generic;
using System.Linq;
 
class Program
{
    static void Main()
    {
        string[] arr = new string[]
        {
            "One",
            "Two"
        };
 
        var dict = arr.ToDictionary(item => item, item => true);
 
        foreach (var pair in dict)
        {
            Console.WriteLine("{0}, {1}",
                pair.Key,
                pair.Value);
        }
    }
}
cs


Dictionary linq[C# 딕셔너리] 예제 소스


C# Dictionary 9가지 사용법, 딕셔너리 예제

댓글(0)

Designed by JB FACTORY