SortedList(ソートキー指定型リスト)
SortedListは、Hashtableのようにキーと値の組み合わせを格納する、リスト構造をもったコレクションです。Hashtabelがキーを値へアクセスするための要素として扱ったのに対し、SortedListではキーをソートのための要素として扱います。ArrayListでは格納している値によって、Sortメソッドが要素を意図したとおりに並べ替えてくれるとは限らないと書きましたが、SortedListではキーにソート可能な値を与えておくことによって、どのような値を保持していても思い通りの順序に並べ替えることができます。
SortedListサンプルプログラムの解説
SortedList sl = new SortedList();
sl.Add(0, "最初のオブジェクト");
sl.Add(1, 3.1415);
sl.Add(2, "Third Object");
sl[3] = true;
sl[4] = false;
Console.WriteLine("要素の数{0}", sl.Count);
for (int i = 0; i < sl.Count; i++)
{
Console.WriteLine("{0}番目の要素:{1}", i+1, sl[i]);
}
要素の数5 1番目の要素:最初のオブジェクト 2番目の要素:3.1415 3番目の要素:Third Object 4番目の要素:True 5番目の要素:False
サンプルでは単純に整数型オブジェクトをキーに指定し、値に様々なオブジェクトを格納させています。キーが標準の比較演算子で順序よく並べることのできるオブジェクトなので、値がどのようなものであろうと、意図した順番通り並べ替えることができている様子をご覧いただけると思います。
SortedListもHashtabele同様、登録されていないキーに対してはnull参照を返します。また、値の登録時にキーがnullではいけないというのも同じです。コンストラクタではあらかじめリストの大きさを指定できる点も、Hashtableと同じです。
SortedListの基本的な使い方
基本的には、
Add(key, value)でキーと値を格納するSortedList[key]として値を参照するRemove(key)で指定要素を削除する
という、Hashtableとほとんど同じ使い方をします。参照のスタイルを借りてキーと値のペアを登録できるところも同じです。コンストラクタにICompareインターフェイスを実装した比較演算子を渡しておけば、標準の比較演算子では大小を決めることができないようなオブジェクトもキーとして選択可能です。
SortedListを使う上での注意点
MSDNによれば、foreachステートメントで用いる際には、DictionaryEntryを用いて
foreach(DictionaryEntry d in targetSortedList){...}
のような形でアクセスする必要があると書かれています。これはforeachステートメントがコレクション内のデータの型を相手に順次アクセスをするという性質に由来するもので、キーと値のペアでデータを格納しているSortedListでは、一意に型を決定することができないことに起因しています。
