Programing/C#

C# 프로그래밍의 기초: SortedDictionary

유니얼 2024. 8. 24. 16:17
728x90

SortedDictionary<TKey, TValue>는 C#의 Dictionary와 유사하지만, 자동으로 키를 기준으로 정렬하는 특성을 가진 컬렉션입니다. 이 블로그 포스트에서는 SortedDictionary의 특징, 사용 방법, 그리고 어떤 상황에서 사용하는 것이 적합한지 살펴보겠습니다.

SortedDictionary의 주요 특징

  1. 자동 정렬: SortedDictionary는 키에 따라 자동으로 정렬되며, 키는 기본적으로 오름차순으로 정렬됩니다. 키 중복은 허용되지 않으며, 새로운 키-값 쌍을 추가하면 즉시 올바른 위치에 삽입됩니다.
  2. 키-값 쌍 구조: 각 데이터는 키와 값의 쌍으로 저장되며, 키를 통해 빠르게 데이터에 접근할 수 있습니다. 이 구조는 빠른 검색, 삽입 및 삭제 작업을 지원합니다.
  3. 효율적인 데이터 관리: SortedDictionary는 트리 구조를 사용하여 데이터를 관리합니다. 이는 대규모 데이터 집합에서 삽입, 삭제, 검색 작업을 효율적으로 수행할 수 있도록 합니다.

주요 메서드 및 사용 방법

  • Add(TKey key, TValue value): 새로운 키-값 쌍을 추가합니다. 키가 이미 존재하면 예외가 발생합니다.
  • Remove(TKey key): 지정된 키에 해당하는 요소를 제거합니다.
  • ContainsKey(TKey key): 딕셔너리에 특정 키가 존재하는지 확인합니다.
  • TryGetValue(TKey key, out TValue value): 키에 해당하는 값을 안전하게 검색하고, 성공 여부를 반환합니다.
  • Keys, Values: 딕셔너리의 모든 키 또는 값에 접근할 수 있는 컬렉션을 제공합니다.
  • Count: 딕셔너리에 저장된 요소의 수를 반환합니다.

전체예제 코드

using System;
using System.Collections.Generic;

namespace CSharp_ProgramingStudy.Chapter6_DataStructure
{
    public class Class10
    {
        public void Run()
        {
            // SortedDictionary 생성
            SortedDictionary<int, string> sortedDict = new SortedDictionary<int, string>();

            // 키-값 쌍 추가
            sortedDict.Add(2, "Two");
            sortedDict.Add(1, "One");
            sortedDict.Add(3, "Three");

            // 자동으로 정렬된 키-값 쌍 출력
            Console.WriteLine("SortedDictionary elements:");
            foreach (KeyValuePair<int, string> kvp in sortedDict)
            {
                Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
                // 출력 순서: Key: 1, Value: One
                //            Key: 2, Value: Two
                //            Key: 3, Value: Three
            }

            // 특정 키를 사용하여 값에 접근
            if (sortedDict.TryGetValue(2, out string value))
            {
                Console.WriteLine($"Value for key 2: {value}"); // 출력: Value for key 2: Two
            }

            // 키를 사용하여 요소 제거
            sortedDict.Remove(3);

            // 요소 제거 후 SortedDictionary 출력
            Console.WriteLine("After removing key 3:");
            foreach (KeyValuePair<int, string> kvp in sortedDict)
            {
                Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
                // 출력 순서: Key: 1, Value: One
                //            Key: 2, Value: Two
            }

            // 특정 키가 포함되어 있는지 확인
            Console.WriteLine($"Contains key 3: {sortedDict.ContainsKey(3)}"); // 출력: Contains key 3: False
        }
    }
}

결론

SortedDictionary<TKey, TValue>는 자동으로 정렬되는 데이터 컬렉션을 필요로 하는 애플리케이션에 이상적입니다. 특히, 정렬된 데이터를 유지하면서 키에 기반한 빠른 접근이 필요한 경우 유용하게 사용할 수 있습니다. 하지만 삽입 및 삭제 작업의 비용이 SortedList에 비해 높을 수 있으므로, 성능 요구 사항과 데이터 크기를 고려하여 적합한 컬렉션 타입을 선택하는 것이 중요합니다.

반응형