C# - Dictionary에서 key, value 가져오기

Dictionary에서 특정 key, value의 데이터를 찾아서 가져오는 방법을 소개합니다.

1. FirstOrDefault()를 이용한 방법

1.1 key로 value 가져오기

FirstOrDefault(function)는 함수 조건에 가장 먼저 만족하는 key-value 쌍을 KeyValuePair 타입으로 리턴합니다. KeyValuePair에서 key와 value를 가져올 수 있습니다.

아래와 같이 특정 key에 대해서 key-value 값을 가져올 수 있습니다. 만약 key가 존재하지 않으면 타입의 기본 값이 리턴됩니다.

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            Dictionary<string, int> dict = new Dictionary<string, int>()
            {
                { "one", 1 },
                { "two", 2 },
                { "three", 3 }
            };

            string keyToGet = "two";
            var result = dict.FirstOrDefault(kvp => kvp.Key.Equals(keyToGet));

            Console.WriteLine(result.Key);
            Console.WriteLine(result.Value);
        }
    }
}

Output:

two
2

1.2 value로 데이터 가져오기

아래와 같이 특정 조건의 value를 찾아서 key-value 데이터를 가져올 수 있습니다. 다수의 value가 조건을 충족해도 하나만 가져옵니다.

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            Dictionary<string, int> dict = new Dictionary<string, int>()
            {
                { "one", 1 },
                { "two", 2 },
                { "three", 3 }
            };

            var result = dict.FirstOrDefault(kvp => kvp.Value >= 1);

            Console.WriteLine(result.Key);
            Console.WriteLine(result.Value);
        }
    }
}

Output:

one
1

2. Where()를 이용한 방법

Dictionary.Where(function)은 인자로 전달된 함수를 충족하는 KeyValuePair들을 Enumerable 타입으로 리턴합니다.

아래 예제는 key가 two인 데이터를 찾고, 그 key를 Enumerable로 리턴하는 예제입니다. 동일한 key가 하나만 있기 때문에 최대 1개의 데이터만 리턴됩니다.

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            Dictionary<string, int> dict = new Dictionary<string, int>()
            {
                { "one", 1 },
                { "two", 2 },
                { "three", 3 }
            };

            string keyToGet = "two";
            var keys = dict.Where(kvp => kvp.Key.Equals(keyToGet)).Select(kvp => kvp.Key);

            Console.WriteLine(String.Join(", ", keys));
        }
    }
}

Output:

two

만약 key-value 쌍을 딕셔너리로 리턴 받고 싶을 때는 아래와 같이 ToDictionary()를 사용하여 구현할 수 있습니다.

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            Dictionary<string, int> dict = new Dictionary<string, int>()
            {
                { "one", 1 },
                { "two", 2 },
                { "three", 3 }
            };

            string keyToGet = "two";
            var result = dict.Where(kvp => kvp.Key.Equals(keyToGet))
                    .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

            Console.WriteLine(String.Join(", ", result));
        }
    }
}

Output:

[two, 2]

위의 예제들은 key의 조건으로 데이터를 찾았는데, value에 대해서 찾도록 구현할 수 있습니다.

3. for문을 이용한 방법

foreach로 딕셔너리의 모든 데이터를 순회하면서, 특정 key 또는 value 조건을 만족하는 데이터만 리스트에 추가할 수 있습니다.

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            Dictionary<string, int> dict = new Dictionary<string, int>()
            {
                { "one", 1 },
                { "two", 2 },
                { "three", 3 }
            };

            var result = new List<KeyValuePair<string, int>>();
            foreach (KeyValuePair<string, int> entry in dict) {
                if (entry.Value >= 2) {
                    result.Add(entry);
                }
            }

            System.Console.WriteLine(string.Join(", ", result));
        }
    }
}

Output:

[two, 2], [three, 3]
Loading script...
codechachaCopyright ©2019 codechacha