딕셔너리는 원소들의 모음이에요. 각 원소는 키와 값으로 이루어져 있고, 딕셔너리의 메서드에 키를 전달하면 그 키에 연결된 값이 반환돼요. 다른 언어에서 맵이나 연관 배열이 하는 역할과 같아요.
딕셔너리는 다음과 같이 만들 수 있어요.
new Dictionary<int, string>();
// Empty dictionary
또는
new Dictionary<int, string>
{
[1] = "One",
[2] = "Two"
};
// Or
new Dictionary<int, string>
{
{1, "One"},
{2, "Two"}
};
// 1 => "One", 2 => "Two"
키와 값의 타입도 딕셔너리 정의의 일부라는 점에 주의해요.
한 번 만들고 나면, 딕셔너리에 내장된 Add와 Remove 메서드를 사용해 항목을 추가하거나 제거할 수 있어요.
딕셔너리에서 값을 가져오거나 바꿀 때는 키를 사용해 딕셔너리를 인덱싱해요.
var numbers = new Dictionary<int, string>
{
{1, "One"},
{2, "Two"}
};
// Set the value of the element with key 2 to "Deux"
numbers[2] = "Deux";
// Get the value of the element with key 2
numbers[2];
// => "Deux"
딕셔너리에 값이 존재하는지 확인하려면 다음과 같이 해요.
var dict = new Dictionary<string, string>{/*...*/};
dict.ContainsKey("some key that exists");
// => true
딕셔너리를 열거하면 키/값 쌍을 열거하게 돼요. 딕셔너리에는 키나 값만 열거할 수 있게 해 주는 속성도 있어요.
이 연습 문제에서는 국제 전화 코드 딕셔너리를 사용해 국제 전화 코드를 관리하는 코드를 작성해요.
딕셔너리는 키에 정수(전화 코드)를, 값에 문자열(국가 이름)을 사용해요.
DialingCodes 정적 클래스와 관련된 9개의 작업이 있어요.
빈 딕셔너리를 반환하는 DialingCodes.GetEmptyDictionary() (정적) 메서드를 구현해요.
DialingCodes.GetEmptyDictionary();
// => empty dictionary
코드가 1인 "United States of America", 코드가 55인 "Brazil", 코드가 91인 "India", 이렇게 세 개의 전화 코드를 담고 있는 미리 채워진 딕셔너리가 있어요. 미리 채워진 딕셔너리를 반환하는 DialingCodes.GetExistingDictionary() (정적) 메서드를 구현해요.
DialingCodes.GetExistingDictionary();
// => 1 => "United States of America", 55 => "Brazil", 91 => "India"
딕셔너리를 만들고 전화 코드와 그에 해당하는 국가 이름을 추가하는 DialingCodes.AddCountryToEmptyDictionary() (정적) 메서드를 구현해요.
DialingCodes.AddCountryToEmptyDictionary(44, "United Kingdom");
// => 44 => "United Kingdom"
비어 있지 않은 딕셔너리에 전화 코드와 그에 해당하는 국가 이름을 추가하는 DialingCodes.AddCountryToExistingDictionary() (정적) 메서드를 구현해요.
DialingCodes.AddCountryToExistingDictionary(DialingCodes.GetExistingDictionary(),
44, "United Kingdom");
// => 1 => "United States of America", 44 => "United Kingdom", 55 => "Brazil", 91 => "India"
전화 코드를 받아 그에 해당하는 국가 이름을 반환하는 DialingCodes.GetCountryNameFromDictionary() (정적) 메서드를 구현해요. 전화 코드가 딕셔너리에 없으면 빈 문자열이 반환돼요.
DialingCodes.GetCountryNameFromDictionary(
DialingCodes.GetExistingDictionary(), 55);
// => "Brazil"
DialingCodes.GetCountryNameFromDictionary(
DialingCodes.GetExistingDictionary(), 999);
// => string.Empty
전화 코드가 딕셔너리에 존재하는지 확인하는 DialingCodes.CheckCodeExists() (정적) 메서드를 구현해요.
DialingCodes.CheckCodeExists(DialingCodes.GetExistingDictionary(), 55);
// => true
전화 코드를 받아 딕셔너리에서 그에 해당하는 국가 이름을 매개변수로 전달된 국가 이름으로 바꾸는 DialingCodes.UpdateDictionary() (정적) 메서드를 구현해요. 전화 코드가 딕셔너리에 없으면 딕셔너리는 바뀌지 않아요.
DialingCodes.UpdateDictionary(
DialingCodes.GetExistingDictionary(), 1, "Les États-Unis");
// => 1 => "Les États-Unis", 55 => "Brazil", 91 => "India"
DialingCodes.UpdateDictionary(
DialingCodes.GetExistingDictionary(), 999, "Newlands");
// 1 => "United States of America", 55 => "Brazil", 91 => "India"
전화 코드를 받아 딕셔너리에서 해당 레코드(전화 코드 + 국가 이름)를 제거하는 DialingCodes.RemoveCountryFromDictionary() (정적) 메서드를 구현해요.
DialingCodes.RemoveCountryFromDictionary(
DialingCodes.GetExistingDictionary(), 91);
// => 1 => "United States of America", 55 => "Brazil"
딕셔너리에 저장된 이름이 가장 긴 국가의 이름을 반환하는 DialingCodes.FindLongestCountryName() (정적) 메서드를 구현해요.
DialingCodes.FindLongestCountryName(
DialingCodes.GetExistingDictionary());
// => "United States of America"
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.