2011-06-04 10 views
0

あるリスト内のある要素の位置と別のリスト内の同じ要素との間の距離を作る必要があります。Ngramsのリスト内の距離

i'veこの

public void out_of_place(List<NgramItem> Test, List<NgramItem> Train) 
    { 
     List<int> result = new List<int>(); 
     int indexTest = -1; 
     int indexTrain = -1; 

      foreach (NgramItem item in Test) {   
      indexTest = Test.IndexOf(item); 
      indexTrain = Train.IndexOf(item);     
      } 
      Console.WriteLine(" Index: {0} {1}", indexTest, indexTrain); 

    } 

パブリッククラスNgramItemような何か試してみました:IComparableを { プライベート文字列のnグラムを、 プライベートint頻度; // ... }

しかし、私は列車の列車の項目のインデックスを取得できません。 anybosyいくつかは私の提案を取得ですか?

おかげ

+0

同じオブジェクトか同じIDですか? –

+0

もっとコードを表示して詳細情報を提供できますか? 'NgramItem'とは何ですか? 'Test'と' Train'はどのように定義されていますか?投稿したコードに間違いはないようです。 'Train.IndexOf()'は何を返しますか? – svick

+0

NgramItemはngram(単語)の頻度を持つクラスです。テストと列車はリストであり、それらは満たされています。 indexOf()は、コレクションの特定の要素のインデックスを返します。 – Traca

答えて

1

あなたが使用したり、NgramItemコレクション型のいずれかの詳細は与えられていません。ただし、Train.IndexOf(item)を実行すると参照型にデフォルトのEqualsが使用され、その値はReferenceEqualsとなる可能性があります。インスタンスがIndexOfの2つのコレクションで共有されていない限り、TestのインスタンスはTrainに格納されないため、常に-1が返されます。

解決策はNgramItemの2つのインスタンスが同じ値を表すかどうかを判断するためにNgramItemEqualsを実装することです。 Equalsを上書きする場合は、GetHashCodeも上書きする必要があります。

+0

NgramItemは、私が定義するオブジェクトです。言葉や言葉の頻度のように見ることができます。 Ideiaは、Testからの各単語について、Trainリスト内の同じ単語からの距離を計算することです。 例:Test = A B C D Train = D C A B。距離は次のようになります。2 2 1 3. – Traca

+0

Martinあなたはリグードです。私はEqualsを実装しようとします。 – Traca

+0

私はあなたの解決策を試しましたが、それでも動作していません...とにかくありがとうございます。 – Traca