2011-09-08 15 views
0

これはソリューションのコード例です。問題クラスを削除する方法を探しています。 ListのContainsメソッドを見ていました。要素がIEnumerableで繰り返されているかどうかを確認する方法は?

public IEnumerable<Problem> Create(int quantify) 
{ 
    for (int i = 0; i < quantify; i++) 
    { 
     yield return Create(); 
    } 
} 
+0

コードサンプルには何が関係していますか?このような列挙子ブロックを使用すると、 'ReferenceEquals:true'インスタンスを取得できず、おそらく' IEquatable :: Equals:true'要素( 'Problem'と' Create() 'の両方の定義に依存します) – sehe

答えて

4

あなたは、単に任意の重複を排除したいとProblemDistinctメソッドを使用し、その後平等をサポートしている場合。

IEnumerable<Problem> collection = ...; 
IEnumerable<Problem> noRepeats = collection.Distinct(); 
1

イテレータブロックに固執する場合は、最初の場所で任意の繰り返しProblemインスタンスが得られないためにHashSetを使用することができます。区別はすることができますプロパティに基づいている場合

public IEnumerable<Problem> Create(int quantify) 
{ 
    HashSet<Problem> problems = new HashSet<Problem>(); 
    for (int i = 0; i < quantify; i++) 
    { 
     var problem = Create(); 
     if(!problems.Contains(problem)) 
     { 
      yield return problem; 
      problems.Add(problem); 
     } 
    } 
} 
0

使用するGroupBy

Create(q).GroupBy(p => p.PropertyToCompare).Select(p => p.First()); 
関連する問題