ソートされた連想配列

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で調べても全然ヒットしないし。仕方なくクラス定義しました。