2011-12-13 9 views
2

私はリストを使って関数を作成しようとしています。 重複をソートして削除することです。 いいですが、重複したものは削除しないでください。 どうしたのですか? doubleC#で簡単なリスト操作を行うことができません

void sort_del(List<double> slist){ 
     //here i sort slist 
     //get sorted with duplicates 

     List<double> rlist = new List<double>(); 
     int new_i=0; 
     rlist.Add(slist[0]); 
     for (i = 0; i < size; i++) 
     { 
      if (slist[i] != rlist[new_i]) 
      { 
       rlist.Add(slist[i]); 
       new_i++; 
      } 

     } 

     slist = new List<double>(rlist); 
     //here get without duplicates 
    } 

答えて

7

slistは値渡しされるので、それは動作しません。 rlistをそれに割り当てることは、発信者の最後に影響を与えません。重複を検出するためのアルゴリズムはうまくいくようです。あなたが他の回答で提案よりエレガントなLINQの方法を使用したくない場合は、あなたのリストを返すようにする方法を変更します。

List<double> sort_del(List<double> slist){ 
    // Do your stuff 
    return rlist; 
} 
+0

...私は私が私の最後のコメントに考えていたかを正確にはわからないthaks –

4

あなただけDistinct()

slist = new List<double>(rlist.Distinct()); 

または多分を使用することができます。

slist.Distinct().Sort(); 
+0

LINQ to Objectsライブラリがクエリの最適化を行うことができない限り、slist.Sort()。Distinct()が良いでしょう。 – tster

+0

は、私は少数のオブジェクトをソートすると、これが動作しているようです – Joe

+0

速くていただろうと考えていた参照してください! – tster

0

あなたが根底にあるリストを変更していません。新しいコレクションに追加しようとしていますが、新しいコレクションに古いコレクションが正しく含まれているかどうかはチェックしていません。

あなたが宿題のためにこれを行う必要がある場合(他の人が指摘したLINQでこれを行うためのデータ構造と簡単な方法があるようですが)、ソートピースと複製の削除2つの別々の方法に分ける。重複を削除するメソッドは、リストをパラメータとして受け入れ(新しいものと同じように)、重複することなく新しいリストインスタンスを返す必要があります。

関連する問題