Front-end Developer

0%

컬렉션 - 딕셔너리

딕셔너리

List<T>와 달리 색인이 0~n 사이의 수가 아니라 임의의 데이터형이다. 사전과 비슷하게 키를 이용해 그 키에 해당하는 값을 찾는다.

키(key): 임의의 데이터형. 어떠한 데이터형도 키로 쓸 수 있다.
값(value): 실제 저장되는 값

  • 딕셔너리는 배열처럼 연속된 메모리에 내부 데이터를 저장할 수 없다. 따라서 배열이 더 효율적이다.
  • 다른 언어에서는 맵(map)이라고 한다.
  • 배열처럼 0, 1, 2… 이런 식으로 순서대로 저장하기 힘든 경우에 쓰면 좋다.
  • 데이터 저장 공간이 크고, 배열 중간에 데이터를 삽입 및 삭제를 자주해야하는 경우 쓰면 좋다.

딕셔너리 생성

1
Dictionary<TKey, TValue> <변수명> = new Dictionary<TKey, TValue>();
1
2
Dictionary<int, string> students = new Dictionary<int, string>();
Dictionary<int, int> scores = new Dictionary<int, int>();
  • TKey: 어떤 자료형의 키를 담을지 표현
  • TValue: 어떤 자료형의 값을 담을지 표현

딕셔너리에 데이터 추가하기

1
Dictionary.Add(TKey, TValue);

키와 매핑되는 값을 딕셔너리에 추가

1
2
3
4
5
6
Dictionary<string, string> students = new Dictionary<string, string>();
students.Add("A1","Bob");
students.Add("A2","Bobby");

//이미 들어 있는 키로 새로운 데이터를 추가하면?
students.Add("A2","Alex"); // 에러 발생

중복된 키를 확인 후 데이터 추가하기

이미 있는 키를 가지고 새로운 데이터를 추가하려고 하면 에러가 발생하기 때문에 이를 해결하기 위해 중복된 키가 있는지 확인 후 추가한다.

1
bool bSuccess = Dictionary<TKey, TValue>.TryAdd(Tkey key, TValue value);
1
2
3
4
5
Dictionary<string, string> students = new Dictionary<string, string>();
// {("A1", "Bob"),("A2", "Bobby")}

bool bSuccess1 = students.TryAdd("A1", "Bob"); //거짓
bool bSuccess1 = students.TryAdd("A3", "Alex"); //참
  • 딕셔너리 안에 키가 이미 있으면 거짓 반환
  • 딕셔너리 안에 키가 없으면 새로운 값을 넣고 참을 반환

딕셔너리 안에 키가 있는지 확인하기

1
bool bContain = Dictionary<TKey, TValue>.ContainsKey(TKey, key);

딕셔너리 안에 키가 있으면 참, 없으면 거짓 반환

1
2
3
4
5
Dictionary<string, string> students = new Dictionary<string, string>();
// {("A1", "Bob"),("A2", "Bobby")}

bool bContain1 = students.ContainKey("A1"); //참
bool bContain2 = students.ContainKey("Bob"); //거짓

딕셔너리 안에 밸류가 있는지 확인하기

1
bool bContain = Dictionary<TKey, TValue>.ContainsValue(TKey, key);

딕셔너리 안에 키가 있으면 참, 없으면 거짓 반환

1
2
3
4
5
Dictionary<string, string> students = new Dictionary<string, string>();
// {("A1", "Bob"),("A2", "Bobby")}

bool bContain1 = students.ContainsValue("Bob"); //참
bool bContain2 = students.ContainsValue("Alex"); //거짓

딕셔너리의 모든 요소 삭제하기

딕셔너리의 모든 요소를 삭제

1
Dictionary<TKey, TValue>.Clear();

딕셔너리 안에 있는 요소 삭제

1
bool bRemoved = Dictionary<TKey, TValue>.Remove(TKey, key);

딕셔너리 안에 키가 있으면 요소를 삭제 후 참, 없으면 거짓 반환

1
2
3
4
5
Dictionary<string, string> students = new Dictionary<string, string>();
// {("A1", "Bob"),("A2", "Bobby")}

bool bRemoved1 = students.Remove("A1"); //참
bool bRemoved2 = students.Remove("A3"); //거짓

딕셔너리에서 키와 매핑된 값 가져오기

1
bool bFound = Dictionary<TKey, TValue>.TryGetValue(TKey, key, out TValue value);
  • 딕셔너리 안에 키가 있으면 값을 out 매개변수에 대입하고 참을 반환
  • 딕셔너리 안에 키가 없으면 거짓 반환
1
2
3
4
5
Dictionary<string, string> students = new Dictionary<string, string>();
// {("A1", "Bob"),("A2", "Bobby")}

string value;
bool bFound = students.TryGetValue("A1", out value)

요소 추가/접근법 - []

1
Dictionary<TKey, TValue>[key] = value;
  • 키가 이미 있다면 연결된 값 변경
  • 키가 없다면 키와 값을 새로운 원소로 추가
1
2
3
4
5
6
Dictionary<string, string> students = new Dictionary<string, string>();
// {("A1", "Bob"),("A2", "Bobby")}

students["A1"] = "Tomas"
string student = students["A3"] // throws an exception
students["A2"] = "Jason"
[] 사용
key A1 A2 A3
value Bob -> Tomas Bobby Jason

References
실무 프로그래밍 입문(C#)