C#

[C#]Dictionary 키에 해당하는 값 가져오는 방법

DevStory 2022. 8. 20.

Dictionary 키에 해당하는 값 가져오는 방법

이번 포스팅은 Dictionary에서 특정 키(Key)에 해당하는 값(Value)을 가져올 수 있는 몇 가지 방법들을 소개합니다.


방법 1. 대괄호 표기법

Dictionary는 JavaScript의 객체처럼 대괄호 표기법을 사용하여 특정 키에 해당하는 값을 가져올 수 있습니다.

 

다음 예제는 string 타입의 키와 int 타입의 값을 가지는 Dictionary에서 특정 키에 해당하는 값을 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    Console.WriteLine("Key가 \"둘리\"인 Value는? " + dict["둘리"]);
  }
}

[실행 결과]

Key가 "둘리"인 Value는? 10

대괄호 표기법의 단점은 특정 키가 존재하지 않으면, KeyNotFoundException이 발생합니다.

 

다음 예제는 Dictonary에 존재하지 않는 키를 대괄호에 작성하였습니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    Console.WriteLine("Key가 \"고길동\"인 Value는? " + 
        dict["고길동"]);
  }
}

[에러 내용]

따라서, 특정 키가 존재하는지 확인 후 대괄호 표기법을 사용합니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    if (dict.ContainsKey("고길동"))
    {
      Console.WriteLine("Key가 \"고길동\"인 Value는? " +
          dict["고길동"]);
    }
    else
    {
      Console.WriteLine("\"고길동\"은 dict의 Key로 등록되지 않았습니다.");
    }
  }
}

[실행 결과]

"고길동"은 dict의 Key로 등록되지 않았습니다.

아래 포스팅은 Dictonary에 키가 존재하는지 확인할 수 있는 다양한 방법을 소개합니다.

 

[C#]Dictionary 키가 존재하는지 확인하는 방법

Dictionary 키가 존재하는지 확인하는 방법 C#의 Dictionary 클래스는 형식의 컬렉션으로 키(Key)는 Dictionary 객체에서 중복되지 않은 고유한 값으로 설정되어야 합니다. 만약, 다음 예제처럼 Dicitionary의

developer-talk.tistory.com


방법 2. Dictionary의 TryGetValue 메서드

두 번째 방법으로 Dictonary 클래스에서 제공하는 TryGetValue() 메서드를 사용하여 특정 키에 해당하는 값을 가져올 수 있습니다.

 

TryGetValue() 메서드의 첫 번째 매개변수에 키를 전달하고 두 번째 매개변수에는 값을 반환받는 변수를 out 키워드와 함께 전달합니다.

 

TryGetValue() 메서드는 키가 존재하면 true를 반환하고 그렇지 않으면 false를 반환하므로 특정 키가 존재하지 않더라도 KeyNotFoundException이 발생하지 않습니다.

 

다음 예제는 Dictionary에 존재하는 키와 매핑되는 값을 TryGetValue() 메서드로 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    int val = 0;
    if (dict.TryGetValue("둘리", out val))
    {
      Console.WriteLine("Key가 \"둘리\"인 Value는? " + val);
    }
    else
    {
      Console.WriteLine("\"둘리\"는 dict의 Key로 등록되지 않았습니다.");
    }
  }
}

[실행 결과]

Key가 "둘리"인 Value는? 10

방법 3. LINQ의 FirstOrDefault 메서드

Dictionay에서 특정 키에 해당하는 값을 가져오는 방법으로 LINQ에서 제공하는 메서드를 활용할 수 있습니다.

 

LINQ에서 제공하는 FirstOrDefault() 메서드는 배열, 컬렉션과 같은 데이터 집합에서 특정 조건을 만족하는 첫 번째 위치의 데이터를 가져옵니다.

 

LINQ에서 제공하는 기능을 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Linq;

다음 예제는 FirstOrDefault() 메서드를 사용하여 특정 키에 해당하는 값을 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    int val = dict.FirstOrDefault(item => item.Key == "둘리").Value;
    Console.WriteLine("Key가 \"둘리\"인 Value는? " + val);
  }
}

[실행 결과]

Key가 "둘리"인 Value는? 10

특정 키가 존재하지 않는 경우 FirstOrDefault() 메서드는 값의 타입에 해당하는 Default 값을 반환합니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    int val = dict.FirstOrDefault(item => item.Key == "고길동").Value;
    Console.WriteLine("Key가 \"고길동\"인 Value는? " + val);
  }
}

[실행 결과]

Key가 "고길동"인 Value는? 0

방법 4. LINQ의 Where 메서드

검색해야 하는 특정 키가 여러 개인 경우 LINQ의 Where() 메서드를 사용합니다.

 

Where() 메서드에 특정 키를 필터하는 조건문을 작성합니다.

 

Where() 메서드는 IEnumerable<T>를 반환하므로 ToDictionary() 메서드를 사용하여 Where() 메서드에서 필터링된 데이터를 Dictionary로 변환합니다.

class Program
{
  static void Main(string[] args)
  {
    Dictionary<string, int> dict = new Dictionary<string, int>()
    {
      {"둘리", 10 },
      {"또치", 20 },
      {"마이콜", 30 }
    };

    Dictionary<string, int> findDictResult =
        dict
        .Where(item => item.Key == "둘리" || item.Key == "마이콜")
        .ToDictionary(item => item.Key, item => item.Value);

    if(findDictResult.Count > 0)
    {
      foreach(KeyValuePair<string, int> item in findDictResult)
      {
        Console.WriteLine("Key: " + item.Key + ", Value: " + item.Value);
      }
    } 
    else
    {
      Console.WriteLine("\"둘리\", \"마이콜\"은 dict의 Key로 등록되지 않았습니다.");
    }
  }
}

 [실행 결과]

Key: 둘리, Value: 10
Key: 마이콜, Value: 30

아래 포스팅은 LINQ의 Where() 메서드 사용 방법을 설명합니다.

 

[C#]LINQ 데이터 필터링 방법 - Where절

Where절 LINQ의 Where문은 원본 데이터에서 일부 조건을 만족하는 데이터를 추출해야하는 경우 사용됩니다. 예를 들자면, 아래 조건을 만족하는 데이터를 추출하기 위해 Where문을 사용할 수 있습니

developer-talk.tistory.com

아래 포스팅은 LINQ의 결과를 Dictionary로 변환하는 방법을 설명합니다.

 

[C#]LINQ 결과를 Dictionary로 변환 - ToDictionary 메서드

ToDictionary 메서드 C#의 Dictionary 클래스는 Key-Value 쌍으로 구성된 컬렉션입니다. LINQ 결과는 IEnumerable 를 반환하므로 Key-Value 쌍으로 구성된 Dictionary으로 변환해야 하는 경우 특정 작업이 필요한..

developer-talk.tistory.com

반응형

댓글