ソートされた連想配列
javaだとMapインタフェース、C#だとIDictionaryインタフェースで実現されている連想配列。
HashMapやDictionaryでは例えばfor文でレコードを取り出す際の順序が保障されない。そんな時は実装系を変えてjavaならTreeMapを使用し、コンストラクタにComparatorインタフェースを実装したソートアルゴリズムを指定することで、好みのソート順を実現する。・・・ってのはすぐ出てくるんだけどC#だと何なんだろう?ってのがすぐ出てこなくていつももどかしい。結構時間がかかってしまったが、以下のような感じ。
IDictionary<Some, Any> d = new SortedDictionary<Some, Any>(new ComparerImpl());
で、IComparerインタフェースを実装したクラスはこんな感じ。SomeというクラスのNameというstring型のプロパティ順に並べる場合の例。
class ComparerImpl : IComparer<Some> { public int Compare(Some x, Some y) { return x.Name.CompareTo(y.Name); } }
あ、あと今日知ったんですがC#ってインタフェースを実装した無名(匿名)クラスって宣言できないの?javaみたいなノリで書いたんだけど全然ダメで。Googleで調べても全然ヒットしないし。仕方なくクラス定義しました。