IDictionary<TKey,TValue> 인터페이스
- 모든 키-값 쌍 기반 컬렉션의 표준 프로토콜을 정의
- 임의의 형식의 키에 기초해서 요소들에 접근하는 메서드들과 속성들을 추가해서 ICollection<T>를 확장함
namespace System.Collections.Generic
{
public interface IDictionary<TKey, TValue> : ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
{
TValue this[TKey key] { get; set; } // 주 인덱서(키로 접근)
ICollection<TKey> Keys { get; } // 키
ICollection<TValue> Values { get; } // 값
void Add(TKey key, TValue value);
bool ContainsKey(TKey key);
bool Remove(TKey key);
bool TryGetValue(TKey key, out TValue value);
}
}
- 항목 추가: Add(이미 존재한다면 예외) 혹은 인덱서(이미 존재한다면 갱신)
- 항목 조회: TryGetValue(없다면 false) 혹은 인덱서(없다면 예외)
- 존재 유무: ContainsKey
namespace System.Collections.Generic
{
public struct KeyValuePair<TKey, TValue>
{
public KeyValuePair(TKey key, TValue value);
public TKey Key { get; }
public TValue Value { get; }
public override string ToString();
}
}
- IDictionary<TKey,TValue>를 직접 열거하면 위와 같은 KeyValuePair 구조체의 순차열을 얻게 됨
IReadOnlyDictionary<TKey,TValue> 인터페이스
namespace System.Collections.Generic
{
public interface IReadOnlyDictionary<TKey, TValue> : IReadOnlyCollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
{
TValue this[TKey key] { get; }
IEnumerable<TKey> Keys { get; }
IEnumerable<TValue> Values { get; }
bool ContainsKey(TKey key);
bool TryGetValue(TKey key, out TValue value);
}
}
- 사전 멤버들의 읽기 전용 부분집합을 정의
IDictionary 인터페이스
namespace System.Collections
{
public interface IDictionary : ICollection, IEnumerable
{
object this[object key] { get; set; }
ICollection Keys { get; }
ICollection Values { get; }
void Add(object key, object value);
bool Contains(object key);
void Remove(object key);
bool IsReadOnly { get; }
bool IsFixedSize { get; }
void Clear();
IDictionaryEnumerator GetEnumerator();
}
}
- 기본적으로 IDictionary<TKey,TValue>와 같음
- 중요한 2가지 차이점
* 인덱서를 통해 존재하지 않는 키를 조회하는 경우 null을 돌려줌(예외가 아님)
* ContainsKey가 아닌 Contains
namespace System.Collections
{
public struct DictionaryEntry
{
public DictionaryEntry(object key, object value);
public object Key { get; set; }
public object Value { get; set; }
}
}
- IDictionary에 대해 열거하면 위와 같은 DictionaryEntry 구조체의 순차열을 얻게 됨
반응형
'C#' 카테고리의 다른 글
[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#] Dictionary<TKey,TValue>, Hashtable (0) | 2023.09.22 |
[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 |
[C#] LinkedList<T>, LinkedListNode<T> (0) | 2023.09.10 |