2011-09-08 47 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

如果你只是想消除任何重复和Problem支持平等然后使用Distinct方法。如果区分是基于属性,您可以

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); 
     } 
    } 
} 
1

如果你想坚持到迭代器块,你可以使用一个HashSet不摆在首位取得任何重复Problem实例使用GroupBy

Create(q).GroupBy(p => p.PropertyToCompare).Select(p => p.First()); 
0

IEnumerable<Problem> collection = ...; 
IEnumerable<Problem> noRepeats = collection.Distinct(); 
相关问题