Gar*_*ghi 1 c# linq-to-objects c#-4.0
当我在我的集合中有重复项时,我想返回true,否则,我想返回false.
我有以下linq查询.
var t = from i in selectedDrivers
group i by i.Value into g
where g.Count() > 1
select g.Count() > 1;
Run Code Online (Sandbox Code Playgroud)
但问题是,当存在多个重复时,它将返回多个trues,如果没有任何重复,则不返回任何内容(应该为false).
Eri*_*ert 11
但问题是,当存在多个重复时,它将返回多个trues,如果没有任何重复,则不返回任何内容(应该为false).
那很容易解决:
bool hasDupes = t.Any();
Run Code Online (Sandbox Code Playgroud)
如果有多个真理,那就是真的.如果没有,那就错了.
但是坦率地说,我倾向于简单地编写我自己的扩展方法,当它找到第一个副本时保释,而不是构建一组所有重复项然后查询该组:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在就说
bool dupes = selectedDrivers.HasDuplicates();
Run Code Online (Sandbox Code Playgroud)
十分简单.
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |