SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

.NET Frameworkの代表的なコレクションと使い方

System.Collections名前空間直下の主なコレクション

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では、一意に型を決定することができないことに起因しています。

次のページ
Queue(キュー:待ち行列)

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

太田 晃(オオタ アキラ)

 ブログ(http://repse.blogspot.com/)では、coLinux上にMinGWを用いてクロスコンパイル環境を構築し、そのうえでSDLやOpenGLを使ってWindows向けのプログラムを書くとか、海外のソフトウェアを(勝手に)日本語化するとか、Windowsのインデックスサービ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3640 2009/03/23 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング