Language/C#

[C#] Dictionary에 대해

범데이 2023. 1. 28. 14:47

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문으로 각 항목을 순차적으로 접근하여 KeyValue를 Console에 출력하는 예제이다.

foreach (KeyValuePair<string, int> item in Items)
{
  Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);
}

 

 

다른 방법으로는, 아래와 같이 KeyCollection을 가지고 Iteration하며

KeyValue를 가져오는 간단한 방법이다.(내가 자주 사용하는 방법)

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

 

반응형