如何检查元素是否在IEnumerable中重复?

时间:2011-09-08 22:28:45

标签: c# ienumerable

这是解决方案的代码示例。我正在寻找消除重复问题类的方法。我正在看List中的Contains方法。

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

3 个答案:

答案 0 :(得分:4)

如果您只是想消除任何重复项并且Problem支持相等,那么请使用Distinct方法。

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

答案 1 :(得分:1)

如果你想坚持使用迭代器块,你可以使用HashSet来首先不产生任何重复的Problem个实例:

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

答案 2 :(得分:0)

如果区别基于属性,则可以使用GroupBy

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