[C#] Dictionary에 대해
1. Dictionary란?
C#에서 Dictionary 클래스는 <Key, Value> 형식의 컬렉션이다.
System.Collections에 정의되어 있으며 Key는 각 컬렉션에서 고유해야 한다.
이번 포스팅에서는 Dictionary 클래스의 기초적인 사용 방법 및 활용 예제를 소개한다.
2. Dictionary 클래스 사용법
2.1 클래스 사용 및 객체 생성
Dictionary 클래스를 사용하기 전에 using문에 System.Collections.Generic 네임스페이스를 추가한다.
using System.Collections.Generic;
Dictionary클래스는 <Key, Value> 형식이며 Key와 Value는 제네릭 유형이다.
다음은 Key가 string형이며, Value가 int형인 Dictionary객체를 생성하는 예제이다.
Dictionary<string, int> Items = new Dictionary<string, int>();
2.2 item 추가
Dictionary 객체에 item을 추가하기 위해 Add()함수를 사용한다.
Items.Add("빨간포션", 3);
Items.Add("파란포션", 5);
Items.Add("목검", 1);
Add()함수의 첫번째 인수는 Key이며, 두번째 인수는 Value이다.
2.3 item 삭제
Dictionary 객체에 item을 제거하기 위해 Remove() 함수를 사용한다.
Items.Remove("빨간포션");
Items.Remove("파란포션");
Remove()함수의 첫 번째 인수는 Key이다. 즉, 지정된 키가 존재하는 경우 해당 항목을 제거한다.
Dictionary 객체의 모든 항목을 제거하는 경우 다음처럼 Clear() 함수를 사용한다.
Items.Clear();
2.4 item 수정
Dictionary 객체의 Key와 매핑되는 Value의 값을 수정하고 싶은 경우 대괄호([])를 사용하여 Key와 매핑되는 Value로 접근하여 값을 수정한다.
Items["빨간포션"] = 5;
3. Dictionary 클래스 프로퍼티
Dictionary 클래스에는 Count, Keys, Values 세 가지 프로퍼티가 존재한다.
3.1 Count프로퍼티
Count 프로퍼티는 Dictionary 객체의 항목 수를 반환한다.
Console.WriteLine("Items Count: {0}", Items.Count);
// Items Count: 3
3.2 Keys 프로퍼티
Keys 프로퍼티는 KeyCollection 유형의 객체를 반환한다.
Dictionary<string, int>.KeyCollection keys = Items.Keys;
foreach (string key in keys)
{
Console.WriteLine("Key: {0}", key);
}
3.3 Values 프로퍼티
Values 프로퍼티는 ValueCollection 유형의 객체를 반환한다.
Dictionary<string, int>.ValueCollection values = Items.Values;
foreach (int val in values)
{
Console.WriteLine("Value: {0}", val);
}
4. Dictionary 활용예제
4.1 Dictionary의 모든 항목을 Iteration 하는 방법
Dictionary 객체는 foreach문을 사용하여 모든 항목을 순차적으로 접근할 수 있다.
다음은 Dictionary객체인 Items를 foreach문으로 각 항목을 순차적으로 접근하여 Key와 Value를 Console에 출력하는 예제이다.
foreach (KeyValuePair<string, int> item in Items)
{
Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);
}
다른 방법으로는, 아래와 같이 KeyCollection을 가지고 Iteration하며
Key와 Value를 가져오는 간단한 방법이다.(내가 자주 사용하는 방법)
foreach (string item in Items.Keys)
{
int itemAmount = Items[item];
Console.WriteLine("Item name: {0}, amount: {1}", item, itemAmount);
}
4.2 ContainsKey
Dictionary클래스의 ContainsKey 메소드를 이용하여 해당 키가 있는지 검사할 수 있다.
다음은 Items에 Key가 있는지 검사하여, 적절한 결과값을 출력하는 예제이다.
if(Items.ContainsKey("빨간포션"))
{
Console.WriteLine("빨간포션이 존재합니다.");
}
else
{
Console.WriteLine("빨간포션이 존재하지 않습니다.");
}
이를 활용하여, 아래와 같이 Dictionary에 Add를 하기 전에 키 컬렉션의 고유 제약사항을 지키는데에 활용할 수 있다.
if(Items.ContainsKey(key)) Items.Remove(key);
Items.Add(key, val);
#References
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.dictionary-2?view=net-7.0
https://developer-talk.tistory.com/288
https://engineer-mole.tistory.com/174