7.10 SortedList 클래스
SortedList는 Hashtable과 ArrayList의 혼합형 정도로 보면 쉽게 이해하실 수 있습니다. 내부의 데이터는 키(Key)와 값(Value)으로 이루어져 있으며 키를 기준으로 정렬되고 키(Key)와 인덱스(Index)로 액세스할 수 있습니다. SortedList의 가장 큰 특징은 내부적으로 정렬된 컬렉션을 유지하고 있다는 것입니다. SortedList는 키와 값으로 이루어져 있기 때문에 IDictionary 인터페이스를 기본으로 사용합니다. 다음은 SortedList의 프로토타입입니다.
▣ SortedList 클래스의 프로토타입 |
□ public class SortedList : IDictionary, ICollection, IEnumerable, ICloneable |
▣ SortedList 클래스의 특징 |
□ SortedList는 키의 목록 또는 값의 목록만 반환하는 메서드를 제공
□ SortedList는 내부적으로 두 개의 배열 즉, 키에 대한 배열과 관련 값에 대한 배열을 유지하여 요소를 목록에 저장
□ SortedList는 각 요소에 대해 키, 값 또는 인덱스의 세가지 방법으로 액세스함
□ 요소(Element)가 삽입되면, 지정된 키가 이미 존재하는지 검사 à 중복키 허용하지 않음 |
다음은 SortedList에서 사용하는 주요 메서드들입니다.
▣ SortedList 클래스의 메서드 |
□ Add()
· 지정한 키와 값을 가지는 요소를 SortedList에 추가
□ Clear()
· SortedList에서 요소를 모두 제거
□ Contains()
· SortedList에 특정 키가 들어 있는지 여부를 확인
□ ContainsKey()
· SortedList에 특정 키가 들어 있는지 여부를 확인
□ ContainsValue()
· SortedList에 특정 값이 들어 있는지 여부를 확인
□ GetByIndex()
· SortedList의 지정한 인덱스에서 값을 가져온다.
□ GetEnumerator()
· SortedList 전체를 반복할 수 있는 IDictionaryEnumerator를 반환
□ GetKey()
· SortedList의 지정한 인덱스에서 키를 가져온다.
□ GetKeyList()
· SortedList의 키를 가져온다.
□ Remove()
· SortedList에서 지정한 키를 가지는 요소를 제거
□ RemoveAt()
· SortedList의 지정한 인덱스에서 요소를 제거 |
다음 예제는 SortedList를 테스트하기 위한 예제입니다.
& |
SamplesSortedList.cs |
Ü SortedList를 테스트하는 예제 |
using System; using System.Collections;
public class SamplesSortedList { public static void Main() { SortedList mySL = new SortedList(); mySL.Add(76, "four" ); mySL.Add(100, "three" ); mySL.Add(2, "two" ); mySL.Add(8, "zero" ); mySL.Add(5, "one" ); Print("1. SortedList의 목록", mySL); bool IsContains = mySL.Contains(2); Console.WriteLine("2. Key '2' 가 존재하는가? {0}", IsContains); IsContains = mySL.ContainsValue("three"); Console.WriteLine("3. Value 'three' 가 존재하는가? {0}", IsContains); object obj = mySL.GetKey(3); Console.WriteLine("4. Index 3 위치의 Key는? {0}", obj); obj = mySL.GetByIndex(3); Console.WriteLine("5. Index 3 위치의 Value는? {0}", obj); mySL.RemoveAt( 4 ); Print("6. 데이터 제거후의 목록", mySL); } //main
public static void Print( string info, SortedList myList ) { Console.WriteLine(info); Console.WriteLine( "\t-INDEX-\t-KEY-\t-VALUE-" ); for ( int i = 0; i < myList.Count; i++ ) { Console.WriteLine("\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i)); } } } //class |
C:\C#Example\07>csc SamplesSortedList.cs
C:\C#Example\07>SamplesSortedList
1. SortedList의 목록
-INDEX- -KEY- -VALUE-
[0]: 2 two
[1]: 5 one
[2]: 8 zero
[3]: 76 four
[4]: 100 three
2. Key '2' 가 존재하는가? True
3. Value 'three' 가 존재하는가? True
4. Index 3 위치의 Key는? 76
5. Index 3 위치의 Value는? four
6. 데이터 제거후의 목록
-INDEX- -KEY- -VALUE-
[0]: 2 two
[1]: 5 one
[2]: 8 zero
[3]: 76 four |
SortedList 객체 생성한 후 데이터를 삽입하고 있습니다. 데이터를 삽입할 때는 Add() 메서드를 사용하며 키와 값으로 데이터를 삽입합니다.
SortedList mySL = new SortedList();
mySL.Add(76, "four" );
mySL.Add(100, "three" );
mySL.Add(2, "two" );
mySL.Add(8, "zero" );
mySL.Add(5, "one" );
Print("1. SortedList의 목록", mySL);
데이터 삽입이 끝난 후 바로 내부에서 만든 Print() 메서드를 호출하고 있습니다. 이 때 Print() 내에서는 리스트의 개수만큼 GetKey()와 GetByIndex()를 이용하여 데이터를 차례대로 추출하고 있습니다. 여기서 주의 깊게 보아야하는 것은 데이터가 삽입된 순서와 데이터가 추출되는 순서입니다. 삽입된 데이터들이 자동으로 정렬되어 추출된다는 것을 확인할 수 있습니다.
for ( int i = 0; i < myList.Count; i++ ) {
Console.WriteLine("\t[{0}]:\t{1}\t{2}", i, myList.GetKey(i), myList.GetByIndex(i));
특정한 키를 담고 있는가를 확인하기 위해서 Contains() 메서드를 사용하며 특정한 값을 담고 있는지 테스트하기 위해서는 ContainsValue() 메서드를 사용합니다.
bool IsContains = mySL.Contains(2);
IsContains = mySL.ContainsValue("three");
인덱스(Index)로 키나 값을 얻기 위해서는 GetKey(), GetByIndex() 메서드를 사용합니다.
object obj = mySL.GetKey(3);
Console.WriteLine("4. Index 3 위치의 Key는? {0}", obj);
obj = mySL.GetByIndex(3);
Console.WriteLine("5. Index 3 위치의 Value는? {0}", obj);
특정 인덱스 위치의 데이터를 삭제하고자 할 때는 RemoveAt() 메서드를 사용합니다.
mySL.RemoveAt( 4 );
Print("6. 데이터 제거후의 목록", mySL); |