Programing/C#

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

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

SortedList<TKey, TValue>는 C#에서 키-값 쌍을 자동으로 정렬하여 관리하는 컬렉션입니다. 이 자료구조는 Dictionary의 빠른 검색 기능과 List의 정렬된 저장 방식을 결합하여, 데이터를 효율적으로 관리할 수 있게 해줍니다. 이 블로그 포스트에서는 SortedList의 특성, 사용 방법 및 장단점을 자세히 살펴보겠습니다.

SortedList의 특징

  1. 자동 정렬: SortedList는 키를 기준으로 자동으로 데이터를 오름차순으로 정렬합니다. 키 값은 중복될 수 없으며, 정렬된 순서를 유지합니다.
  2. 키-값 쌍 구조: 데이터는 키-값 쌍으로 저장되며, 키를 통해 빠르게 데이터에 접근할 수 있습니다. 이는 Dictionary와 유사하지만, SortedList는 추가로 데이터 정렬 기능을 제공합니다.
  3. 인덱스 접근 가능: SortedList는 키로 데이터에 접근하는 것 외에도 인덱스를 통해 순차적으로 데이터에 접근할 수 있습니다. 이는 SortedDictionary와는 다른 특징입니다.
  4. 메모리 효율성: 비교적 메모리 사용이 효율적이지만, 요소의 삽입과 삭제 과정에서는 SortedDictionary보다 느릴 수 있습니다. 요소 삽입이나 삭제 시 내부 배열의 조정이 필요하기 때문입니다.

주요 메서드 및 속성

  • Add(TKey key, TValue value): 새로운 키-값 쌍을 추가합니다.
  • Remove(TKey key): 지정된 키와 관련된 요소를 제거합니다.
  • ContainsKey(TKey key), ContainsValue(TValue value): 특정 키 또는 값의 존재 여부를 확인합니다.
  • IndexOfKey(TKey key), IndexOfValue(TValue value): 특정 키 또는 값의 인덱스를 반환합니다.
  • Keys, Values: 키 또는 값의 컬렉션을 반환합니다.
  • Count: 컬렉션 내의 요소 수를 반환합니다.

전체예제 코드

using System;
using System.Collections.Generic;

namespace CSharp_ProgramingStudy.Chapter6_DataStructure
{
  public class Class9
  {
    public void Run()
    {
      // SortedList 생성
      SortedList<int, string> students = new SortedList<int, string>();

      // 키-값 쌍 추가
      students.Add(101, "Alice");
      students.Add(103, "Charlie");
      students.Add(102, "Bob");

      // 자동으로 정렬된 키-값 쌍 출력
      Console.WriteLine("SortedList elements:");
      foreach (KeyValuePair<int, string> student in students)
      {
        Console.WriteLine($"ID: {student.Key}, Name: {student.Value}");
        // 출력 순서: ID: 101, Name: Alice
        //            ID: 102, Name: Bob
        //            ID: 103, Name: Charlie
      }

      // 특정 키를 사용하여 값에 접근
      Console.WriteLine($"Student with ID 102: {students[102]}"); // 출력: Student with ID 102: Bob

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

      // 요소 제거 후 SortedList 출력
      Console.WriteLine("After removing ID 103:");
      foreach (KeyValuePair<int, string> student in students)
      {
        Console.WriteLine($"ID: {student.Key}, Name: {student.Value}");
        // 출력 순서: ID: 101, Name: Alice
        //            ID: 102, Name: Bob
      }

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

      // 특정 값이 포함되어 있는지 확인
      Console.WriteLine($"Contains value 'Charlie': {students.ContainsValue("Charlie")}"); // 출력: Contains value 'Charlie': False

      // 인덱스를 통해 요소 접근
      Console.WriteLine($"First student: {students.Values[0]}"); // 출력: First student: Alice
    }
  }
}

결론

SortedList<TKey, TValue>는 데이터를 정렬된 상태로 관리해야 할 때 유용한 자료구조입니다. 그러나 삽입 및 삭제 연산이 자주 발생하는 애플리케이션에서는 성능 저하를 고려해야 합니다. 데이터의 정렬 상태를 유지하면서 효율적인 접근을 제공하기 때문에, 특정 애플리케이션에서는 매우 적합할 수 있습니다. 데이터 구조의 선택은 항상 해당 애플리케이션의 요구 사항에 맞게 고려되어야 합니다.

반응형