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 클래스의 메서드 |
□ 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; | ||
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 );
[출처] [펌] [후다닥편집]컬렉션10 : SortedList 클래스|작성자 눈꽃천사