Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据是否存在重复项返回true或false_C#_C# 4.0_Linq To Objects - Fatal编程技术网

C# 根据是否存在重复项返回true或false

C# 根据是否存在重复项返回true或false,c#,c#-4.0,linq-to-objects,C#,C# 4.0,Linq To Objects,当我的集合中有重复项时,我希望返回true,否则,我希望返回false 我有以下linq查询 var t = from i in selectedDrivers group i by i.Value into g where g.Count() > 1 select g.Count() > 1; 但问题是,当有多个重复项时,它将返回多个true,如果没有任何重复项,它将不返回任何内容(应该是false) 我相信这会成功的 我相信这会起

当我的集合中有重复项时,我希望返回true,否则,我希望返回false

我有以下linq查询

var t = from i in selectedDrivers
        group i by i.Value into g
        where g.Count() > 1
        select g.Count() > 1;
但问题是,当有多个重复项时,它将返回多个true,如果没有任何重复项,它将不返回任何内容(应该是false)

我相信这会成功的


我相信这会起作用。

不是最理想的解决方案,但

var t = selectedDrivers.Distinct().Count() != selectedDrivers.Count();

不是最理想的解决方案,但是

var t = selectedDrivers.Distinct().Count() != selectedDrivers.Count();

在or中汇总您的结果

var q=from i in selectedDrivers
    group i by i.Value into g
    where g.Count() > 1
    select g.Count() > 1

return q.Aggregate(false,(x,y)=>x|y);

在or中汇总您的结果

var q=from i in selectedDrivers
    group i by i.Value into g
    where g.Count() > 1
    select g.Count() > 1

return q.Aggregate(false,(x,y)=>x|y);
给你


var t = selectedDrivers
    .GroupBy(item => item.Value)
    .Any(group => group.Skip(1).Any());
我使用了“group.Skip(1).Any()”来查找至少包含两个元素的组,并避免使用Count()枚举整个组。

在这里


var t = selectedDrivers
    .GroupBy(item => item.Value)
    .Any(group => group.Skip(1).Any());
我使用“group.Skip(1).Any()”查找至少包含两个元素的组,并避免使用Count()枚举整个组

但问题是,当有多个重复项时,它将返回多个true,如果没有任何重复项,它将不返回任何内容(应该是false)

这很容易解决:

bool hasDupes = t.Any();
如果有多个真的,那就是真的。如果没有,那就是假的

但坦率地说,我倾向于简单地编写自己的扩展方法,在找到第一个副本时退出,而不是建立一个包含所有副本的集合,然后查询该集合:

static bool HasDuplicates<T>(this IEnumerable<T> sequence)
{
    var set = new HashSet<T>();
    foreach(T item in sequence)
    {
        if (set.Contains(item))
            return true;
        set.Add(item);
    }
    return false;
}
简单的豌豆

但问题是,当有多个重复项时,它将返回多个true,如果没有任何重复项,它将不返回任何内容(应该是false)

这很容易解决:

bool hasDupes = t.Any();
如果有多个真的,那就是真的。如果没有,那就是假的

但坦率地说,我倾向于简单地编写自己的扩展方法,在找到第一个副本时退出,而不是建立一个包含所有副本的集合,然后查询该集合:

static bool HasDuplicates<T>(this IEnumerable<T> sequence)
{
    var set = new HashSet<T>();
    foreach(T item in sequence)
    {
        if (set.Contains(item))
            return true;
        set.Add(item);
    }
    return false;
}

简单明了。

这没有Eric的解决方案好,因为它将对整个枚举进行分组,但这似乎是在此处使用
任何
的正确方法

var t = selectedDrivers
    .GroupBy(item => item.Value)
    .Any(group => group.Count() > 1)

这不如Eric的解决方案好,因为它将对整个枚举进行分组,但在这里使用
Any
似乎是正确的方法

var t = selectedDrivers
    .GroupBy(item => item.Value)
    .Any(group => group.Count() > 1)

谢谢但这是难以置信的无效。谢谢。这是难以置信的无效。接近,但没有雪茄;-)当我没有重复项时,它仍然会返回true。我希望它为false.interest-.Any()仅当存在记录时才应返回true。哦,我想知道。。。删除最后一个>1-我刚刚意识到它正在将最后一位作为布尔值进行计算,因此即使返回了0条记录,0>1=false和false也是一个结果,因此Any=true。关闭,但没有雪茄;-)当我没有重复项时,它仍然会返回true。我希望它为false.interest-.Any()仅当存在记录时才应返回true。哦,我想知道。。。删除最后一个>1-我刚刚意识到它正在将最后一位作为布尔值进行计算,因此即使返回了0条记录,0>1=false和false也是一个结果,因此Any=true。这是我忘记添加的内容-当它发现重复项时,应该足够并返回了。谢谢你的回答!也许有一个问题?我看到您使用了哈希集。开始阅读并想知道为什么要使用它?@Garth:hashset有一个很好的特性,即插入一个新项目非常快,检查一个项目是否存在非常快。在这种情况下,我使用集合作为“我已经看到的一切”的记录,我需要快速执行的两个操作正是:插入一个新项,或者告诉我一个项是否已经存在。扩展方法中一个可能的优化是使用
Add
返回集合中是否已经存在的事实,允许您省略
包含的调用。但另一方面,这种变化降低了可读性<代码>如果(!set.Add(item))返回true@CodeInChaos:很好的观点。我通常不喜欢对其副作用和价值都有用的表达式,但如果集合很大且没有副本,则可能会获得真正的性能优势。这是我忘记添加的内容-当它找到副本时,应该足够了,然后返回。谢谢你的回答!也许有一个问题?我看到您使用了哈希集。开始阅读并想知道为什么要使用它?@Garth:hashset有一个很好的特性,即插入一个新项目非常快,检查一个项目是否存在非常快。在这种情况下,我使用集合作为“我已经看到的一切”的记录,我需要快速执行的两个操作正是:插入一个新项,或者告诉我一个项是否已经存在。扩展方法中一个可能的优化是使用
Add
返回集合中是否已经存在的事实,允许您省略
包含的调用。但另一方面,这种变化降低了可读性<代码>如果(!set.Add(item))返回true@CodeInChaos:很好的观点。我通常不喜欢对其副作用和价值都有用的表达式,但如果集合很大且没有重复项,那么在这里可能会获得真正的性能优势。