Dictionary<TKey,TValue> 클래스
- 해시테이블 자료구조에 키들과 값들을 저장하므로 빠르고 효율적임
- Dictionary<TKey,TValue>는 IDictionary 인터페이스의 제네릭 버전, 비제네릭 버전을 모두 구현
* 단, 제네릭 버전만 공용으로 노출
- Dictionary는 제네릭 IDictionary의 교과서적 구현
반응형
var myDictionary = new Dictionary<string, int>();
myDictionary.Add("하나", 1); // add를 통한 추가
myDictionary["둘"] = 20; // 인덱서를 통한 추가
myDictionary["둘"] = 2; // 인덱서를 통한 갱신(이미 존재하므로)
myDictionary["셋"] = 3;
Console.WriteLine(myDictionary["하나"]); // 인덱서를 통한 조회
Console.WriteLine(myDictionary.ContainsKey("둘")); // 키 존재 여부 조회 (빠름)
Console.WriteLine(myDictionary.ContainsValue(3)); // 값 존재 여부 조회 (느림)
int val = 0;
// TryGetValue를 통한 값 조회
if (!myDictionary.TryGetValue("넷", out val))
{
Console.WriteLine("존재하지 않음");
}
Console.WriteLine();
// 열거
// 1. KeyValuePair<TKey,TValue>를 이용한 열거
foreach (var item in myDictionary)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
Console.WriteLine();
// 2. Keys (여기서는 string)
foreach (var item in myDictionary.Keys)
{
Console.WriteLine(item);
}
Console.WriteLine();
// 3. Values (여기서는 int)
foreach (var item in myDictionary.Values)
{
Console.WriteLine(item);
}
Console.WriteLine();
- 주어진 요소의 키를 정수 해시코드로 바꾸고, 해시코드를 적당한 알고리즘을 통해 해시 키로 바꿈
- 해시 키를 통해 자료를 넣거나 조회할 위치를 가져옴
- 키 형식으로는 상등 비교가 가능하고 해시 코드를 얻을 수 있기만 하면 OK
* 상등 비교: object.Equals / 해시코드: GetHashCode
* 위 두가지를 재정의하거나 IEqualityComparer 객체를 제공
- 다른 여러 컬렉션과 비슷하게, 사전 생성시 컬렉션의 예상 크기를 지정하면 크기 변경으로 인한 성능 감소를 줄일 수 있음
- 단점
* 항목이 저장되는 순서가 항목을 추가하는 순서와는 다름
* 정렬되지 않음
HashTable 클래스
- Dictionary<TKey,TValue>의 비제네릭 버전
- IDictionary의 비제네릭 버전만 구현한다는 점에서 차이 발생
반응형
'C#' 카테고리의 다른 글
[C#] KeyedCollection<TKey,TItem>, DictionaryBase (0) | 2023.09.30 |
---|---|
[C#] Collection<T>, CollectionBase, ReadOnlyCollection<T> (0) | 2023.09.28 |
[C#] SortedDictionary<TKey,TValue>, SortedList<Tkey,TValue>, SortedList (0) | 2023.09.26 |
[C#] OrderedDictionary, ListDictionary, HybridDictionary (0) | 2023.09.24 |
[C#] IDictionary<TKey,TValue>, IReadOnlyDictionary<TKey,TValue>, IDictionary (0) | 2023.09.20 |
[C#] HashSet<T>, SortedSet<T> (0) | 2023.09.16 |
[C#] BitArray (0) | 2023.09.14 |
[C#] Queue<T>, Queue, Stack<T>, Stack (0) | 2023.09.12 |