SortedDictionary<TKey,TValue> 클래스
SortedList<TKey,TValue> 클래스
SortedList 클래스
반응형
- 요소들을 항상 키를 기준으로 정렬된 상태로 유지하는 사전 클래스
- SortedDictionary<K,V>
* 적흑 트리 사용
* 삽입 및 조회 상황에서 일관된 성능 보임
* 색인이 불가능해 차례로 훑어야 함
- SortedList<K,V>, SortedList
* 배열 2개 사용
* 이진 검색을 사용하므로 조회는 빠르지만 삽입 성능은 나쁨
* 키, 색인으로 요소에 접근 가능
// System.Reflection의 반영 기능을 사용해서
// object의 메소드들을 정렬된 사전에 채우고 그 값들을 나열함
// 오버로드 된 경우가 있을 수 있으므로
// 하나의 키에 여러개의 MethodInfo가 기록되어 있어야 하기에 List를 사용
// 키(TKey) : 메소드 이름(string)
// 값(TValue): 메소드들의 정보(List<MethodInfo>)
var sortedList = new SortedDictionary<string, List<MethodInfo>>();
// 각 메소드에 대해서
foreach (var item in typeof(object).GetMethods())
{
List<MethodInfo> tempInfo;
// 해당 키가 이미 등록되어 있지 않다면
// 즉, 첫 등록하는 경우
if (!sortedList.TryGetValue(item.Name, out tempInfo))
{
// 리스트를 새로 만들고
tempInfo = new List<MethodInfo>();
// 사전에 리스트를 연결해준다
sortedList[item.Name] = tempInfo;
}
// 그 이후 내용 추가
tempInfo.Add(item);
}
// 키를 기준으로 키 이름들을 확인
foreach (var item in sortedList.Keys)
{
Console.WriteLine(item);
}
Console.WriteLine();
// 값을 기준으로 값에 대한 정보들을 확인
foreach (var item in sortedList.Values)
{
// 값은 List로 구성되어 있으므로 List를 열거
foreach (var innerItem in item)
{
Console.WriteLine($"{innerItem.Name.PadLeft(20)} | ReturnType: {innerItem.ReturnType.ToString().PadLeft(15)} | IsVirtual: {innerItem.IsVirtual}");
}
}
- 위 코드는 SortedDictionary<TKey,TValue>와 SortedList<TKey,TValue> 양 쪽을 모두 호환
- 단, 컬렉션의 Keys, Values에 대한 색인 접근을 시도 할 시 List에서만 동작
반응형
'C#' 카테고리의 다른 글
[C#] IComparer<T>, IComparer, Comparer<T> (0) | 2023.10.04 |
---|---|
[C#] IEqualityComparer<T>, IEqualityComparer, EqualityComparer (0) | 2023.10.02 |
[C#] KeyedCollection<TKey,TItem>, DictionaryBase (0) | 2023.09.30 |
[C#] Collection<T>, CollectionBase, ReadOnlyCollection<T> (0) | 2023.09.28 |
[C#] OrderedDictionary, ListDictionary, HybridDictionary (0) | 2023.09.24 |
[C#] Dictionary<TKey,TValue>, Hashtable (0) | 2023.09.22 |
[C#] IDictionary<TKey,TValue>, IReadOnlyDictionary<TKey,TValue>, IDictionary (0) | 2023.09.20 |
[C#] HashSet<T>, SortedSet<T> (0) | 2023.09.16 |