본문 바로가기

C#/Dictionary

배열, 리스트, 딕셔너리로부터 딕셔너리를 생성하는 방법

1. 배열, 리스트를 딕셔너리로 변환

 

 

배열과 리스트를 딕셔너리로 변환하는 목적

  --> 딕셔너리로 변환하면 키를 지정해서 해당 값에 빠르게 접근할 수 있다!

 

 

 

LINQ에 있는 ToDictionary 메서드를 사용하면 배열이나 리스트딕셔너리로 변환할 수 있다.

 

List<Monster>를 Dictionary<int, Monster>로 변환하는 예

var monsters= new List<Monster>();
...
//객체의 멤버를 ToDictionary의 첫 번째 인수에 대입

var monstersDict = monsters.ToDictionary(mon => mon.Code);    

 

이 코드에서는 ToDictionary 메서드첫 번째 인수식별 코드(Monster.Code)를 나타내는 람다식을 넘겨준다.

 

이렇게 하면 식별 코드를 '키(key)'로 이용하고 Monster 객체를 '값(value)'으로 이용해서 딕셔너리를 생성할 수 있다.

Monster 객체가 자동으로 값이 된다.

 

LINQ를 사용해서 구한 객체를 ToDictionary를 통해 딕셔너리로 변환하면 키를 지정해서 빠르게 접근할 수 있다.

 

 

2. 딕셔너리로부터 다른 딕셔너리를 생성

 

리스트를 딕셔너리로 변환하는 방법과 달리 두 번째 인수에 어떤 객체를 값으로 이용할지를 지정한다.

 

아래는 딕셔너리에서 조건에 일치하는 요소만 빼내서(Where 메서드를 이용) 새로운 딕셔너리를 생성하는 코드이다.

var itemDict = new Dictionary<string, int>() {
    {"sword", 500},
    {"spear", 600},
    {"bow", 700},
    {"shield", 800},
};

var newDict = itemDict.Where(x => x.Value >= 600).ToDictionary(item => item.Key, item => item.Value);

foreach (var item in newDict.Keys)
{
    Console.WriteLine(item);
}