C#

[C#]SortedList 클래스

DevStory 2022. 2. 6.

SortedList 클래스란?

SortedList<TKey, TValue>SortedList는 Array와 Hashtable의 조합으로 키로 정렬된 키-값 쌍의 형식을 나타내는 컬렉션입니다. 키의 타입이 int, string과 같은 원시 타입인 경우 키의 오름차순으로 정렬됩니다.

 

C#은 제네릭 컬렉션인 SortedList<TKey, TValue>와 제네릭 컬렉션이 아닌 SortedList를 지원하는데, 제네릭 컬렉션은 키와 값에 타입을 설정함으로써 컴파일러가 타입을 검사하므로 오류가 발생할 가능성이 적습니다.

 

제네릭에 대한 이해도가 있다면, 제네릭 컬렉션인 SortedList<Tkey, Tvalue>를 사용하는 것을 권장합니다.

 

이번 포스팅에서는 SortedList 컬렉션 사용 방법을 설명합니다.

 


SortedList 객체 생성 및 초기화

SortedList 클래스는 System.Collections 네임스페이스의 객체이므로 using문에 다음과 같이 System.Collection을 추가합니다.

using System.Collections;

SortedList 객체를 생성하는 방법은 일반 객체와 동일하게 new 키워드를 사용합니다. 제네릭 컬렉션인 경우 키와 값의 타입을 입력합니다.

// non-generic SortedList 객체 생성
SortedList nonGenericSortedList = new SortedList();

// generic SortedList 객체 생성
SortedList<int, string> genericSortedList = new SortedList<int, string>();

위 예제에서 제네릭 컬렉션 SortedList<TKey, TValue>의 객체인 genericSortedList 객체는 int 타입의 키와 string 타입의 값을 저장할 수 있습니다.

 

▶ SortedList 객체 초기화

SortedList에 초기값이 존재하는 경우 중괄호( {} ) 사이에 키와 값을 입력합니다.

// non-generic SortedList 객체 생성
SortedList nonGenericSortedList = new SortedList()
{
    {5, "또치" },
    {10, "둘리" },
    {3, "마이콜" },
};

// generic SortedList 객체 생성
SortedList<int, string> genericSortedList = new SortedList<int, string>()
{
    {5, "둘리" },
    {10, "마이콜" },
    {3, "또치" },
};

SortedList 객체의 값 접근 방법

값을 접근하는 경우 대괄호( [] ) 사이에 키를 입력합니다.

SortedList nonGenericSortedList = new SortedList()
{
    {5, "둘리" },
    {10, "마이콜" },
    {3, "또치" },
};

Console.WriteLine(nonGenericSortedList[5]); 
// 둘리

 

반복문을 사용하여 여러 SortedList 객체의 키와 값을 접근하는 경우 foreach문과 DictionaryEntry를 사용합니다. DictionaryEntry는 사전 형식으로 키-값 쌍을 정의하는 구조체입니다.

 

만약, 제네릭 컬렉션인 경우 DictionaryEntry 구조체가 아닌 var 타입을 사용합니다.

class Program
{
    static void Main(string[] args)
    {
        SortedList nonGenericSortedList = new SortedList()
        {
            {5, "둘리" },
            {10, "마이콜" },
            {3, "또치" },
        };
        
        // 제네릭 컬렉션은 DictonaryEntry를 var로 변경해야합니다.
        foreach (DictionaryEntry kvp in nonGenericSortedList)
            Console.WriteLine("key: {0}, value: {1}", kvp.Key, kvp.Value);
    }
}

실행 결과

키 값을 기준으로 오름차순으로 정렬된 nonGenericSortedList 객체의 키-값을 접근합니다.

반응형

SortedList 클래스의 프로퍼티와 메서드

▶ Add() 메서드로 키-값 추가

Add() 메서드로 SortedList 객체에 키-값을 추가할 수 있습니다.

첫 번째 매개변수는 키(Key), 두 번째 매개변수는 값(Value)을 입력합니다.

SortedList nonGenericSortedList = new SortedList();

nonGenericSortedList.Add(0, "둘리");
nonGenericSortedList.Add(5, "또치");
nonGenericSortedList.Add(10, "마이콜");

키는 고유한 값이므로 Add() 메서드에 동일한 키를 두 번 이상 입력한 경우 ArgumentException 예외가 발생합니다.

 

키를 추가하는 또 다른 방법으로 대괄호( [] ) 사용 방법이 있습니다. 대괄호 사이에 키(Key)를 입력하고 = 연산자 우측에 값(Value)을 입력하여 키-값을 추가합니다.

class Program
{
    static void Main(string[] args)
    {
        SortedList nonGenericSortedList = new SortedList();

        nonGenericSortedList[0] = "둘리";
        nonGenericSortedList[5] = "또치";
        nonGenericSortedList[10] = "마이콜";
        nonGenericSortedList[10] = "고길동";

        foreach (DictionaryEntry kvp in nonGenericSortedList)
            Console.WriteLine("key: {0}, value: {1}", kvp.Key, kvp.Value);

    }
}

실행 결과

대괄호 사용 방법과 Add() 메서드는 큰 차이점이 존재하는데, 대괄호 사이에 이미 존재하는 키를 입력하는 경우 예외가 발생하지 않고 값이 변경됩니다.

 

▶ Remove() 메서드로 키-값 제거

Remove() 메서드로 SortedList 객체에 키-값을 제거할 수 있습니다. Remove() 함수에 키를 전달합니다. 다음은 키가 5인 키-값이 제거되는 예제입니다.

class Program
{
    static void Main(string[] args)
    {
        SortedList nonGenericSortedList = new SortedList();

        nonGenericSortedList.Add(0, "둘리");
        nonGenericSortedList.Add(5, "또치");
        nonGenericSortedList.Add(10, "마이콜");

        nonGenericSortedList.Remove(5);

        foreach (DictionaryEntry kvp in nonGenericSortedList)
            Console.WriteLine("key: {0}, value: {1}", kvp.Key, kvp.Value);

    }
}

실행 결과

인덱스로 접근하여 키-값을 제거하는 경우에는 RemoveAt() 메서드를 사용합니다.

 

▶ SortedList 클래스의 프로퍼티

프로퍼티 설명
Count SotedList 객체의 요소의 수를 반환합니다.
Capacity SotedList 객체의 용량을 반환하거나 설정합니다.
Keys SortedList 객체의 키를 List로 반환합니다.
Values SortedList 객체의 값을 List로 반환합니다.

 

 SortedList 클래스의 메서드

메서드 설명
Add(key, value) 키와 값을 SortedList 객체에 추가합니다.
Remove(key) SortedList 객체에서 지정된 키가 있는 요소를 제거합니다.
RemoveAt(index) SortedList 객체에서 지정된 인덱스의 요소를 제거합니다.
ContainsKey(key) SortedList 객체에 특정 키가 포함되어 있는지 확인합니다.
ContainsValue(value) SortedList 객체에 특정 값이 포함되어 있는지 확인합니다.
GetByIndex(index) SortedList 객체에서 지정된 인덱스의 위치한 값을 반환합니다.
GetKey(index) SortedList 객체에서 지정된 인덱스의 위치한 키를 반환합니다.
IndexOfKey(key) SortedList 객체에서 지정된 키의 인덱스를 값을 반환합니다.
IndexOfValue(value) SortedList 객체에서 지정된 값의 인덱스를 값을 반환합니다. 동일한 값이 존재하는 경우 0번째 인덱스와 가장 가까운 인덱스를 반환합니다.
Clear() SortedList 객체의 모든 요소를 제거합니다.

SortedList 클래스의 특징

  • SortedList는 키로 정렬된 키-값 쌍의 컬렉션으로 키를 기준으로 오 룸 차순으로 정렬합니다.
  • 새로운 키-값이 추가되는 즉시 SortedList 객체를 정렬합니다.
  • 키(Key)는 고유해야 하며 null 값을 할당할 수 없습니다.
  • 값(Value)은 null 값이거나 중복될 수 있습니다.
반응형

'C#' 카테고리의 다른 글

[C#]텍스트 파일 쓰기  (0) 2022.05.01
[C#]람다식, 람다표현식(Lambda expression)  (0) 2022.05.01
[C#]yield 키워드  (0) 2022.02.06
[C#]IEnumerable 인터페이스란?  (0) 2022.02.06
[C#]동적 변수(dynamic)  (0) 2022.02.05

댓글