2011-09-15 13 views
1

私は、2.0のフレームワークの下のコードをリファクタリングしようとしています。以下のコードは、previous postごとに提供されました。ここで、私はarraylistsの辞書を並べ替える方法を見つけようとしていました。これはその議論からの少しの接線です。以下のコードされています。私は上記のコードを実行しようとすると、一番下のロジックは私の問題をフレームワーク2.0を使用してIComparableを実装する

MultiDimDictList myDicList = new MultiDimDictList(); 
myDicList.Add("fly", a_fly); 
myDicList.Add("img", a_img); 
myDicList.Add("bar", a_bar); 
myDicList.Add("meter", a_meter); 
myDicList.Add("block", a_block); 
myDicList.Add("popularity", a_pop); 

List<int> OrderedByPopularity = new List<int>(); 
ArrayList popList = myDicList["popularity"]; 

for (int i = 0; i < popList.Count; ++i) 
{ 
    OrderedByPopularity.Add(i); 
} 

OrderedByPopularity.Sort((i1, i2) => 
{ 

    return popList[i2].CompareTo(popList[i1]); 

}); 

与えている - つまり、「のCompareTo」が認識されないこと。私はこれについていくつかの読書をして、これは動作するようにIComparableを実装する必要があるように見えますが、私はここでいくつかの助言/提案を使用することができます。どこでIComparableを実装する必要がありますか?また、コンパイラは、私の.Sortメソッドに "delegate"を使用するよう指示しています。問題は、ArrayListの戻りオブジェクトということです=> .Sort(デリゲート(int型I1、int型のI2)あなたの助けを

感謝を

答えて

0

IComparableはあなたがことができるようにしたいクラスに実装するインタフェースです... comparable。Sortメソッドは、バットからすぐにIComparableインターフェイスを操作する方法を知っています。 Sortメソッドを使用して並べ替え、クラスにIComparableを実装する必要があります。それ以外の場合は、CompareToをクラスに呼び出すと、並べ替えアルゴリズムがどのようにクラスを論理的に並べ替えるか知ることができますか?

これは、IComparableの仕組みに関する背景ですが、私が誤読していない限り、ここでは問題がないように見えます。しようとしているようです:

  1. OrderedByPopularityは整数のまとまりです。
  2. 整数をソートします。

あなたが本当にあなたのリスト内の整数をソートしたい場合は、ちょうどすでにその上にCompareToを持っている(Listの要素のタイプである)

(i1, i2) => 
{ 
    return i1.CompareTo(i2); 
} 

intを使用する必要がありますする必要があります。

これは質問に答えますか?

0

オブジェクトはIComparableを実装していません

:?。私右のそれがどのように見えるべきであると思います。

あなたはポップリスト[I2] .CompareTo(何とか)を言うときあなたが存在しないオブジェクト上の関数を呼び出している。

関連する問題