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 |
댓글