我的List<int>
值{1,2,1,5,4,1},只有更长的时间。我想测试列表中是否存在相同值的 n 实例 - 任何值。例如,如果我有bool duplicateCount(int n, IEnumerable<int> collection)
之类的函数,请使用上面的列表:
duplicateCount(4,list); //假
duplicateCount(3,list); //是的,因为有3x&#39; 1&#39;
过去我会通过构建Dictionary<int, int>
并计算每个成员的实例来解决这样的问题。但是,为了帮助我学习Linq,我想尝试使用该技术实现解决方案。
我编写了一个使用groupby的查询,但是我在获取每个组中的元素数量时遇到了问题。关于如何在这里进行的任何建议?
var q = from i in list group i by i into g select g.Count();
答案 0 :(得分:4)
您可以使用GroupBy
执行此操作,然后检查Any
群组Count
是否大于或等于数字
public bool duplicateCount(int n, IEnumerable<int> collection)
{
return collection.GroupBy(x => x).Any(g => g.Count() >= n)
}
如果您想确定是否有任何值重复n次,请执行以下操作。
public bool duplicateCount(int n, IEnumerable<int> collection)
{
return collection.GroupBy(x => x).Any(g => g.Count() == n)
}
还有查询语法,但我认为在这种情况下,方法语法看起来更好,特别是因为你无法将Any
翻译成查询语法。
public bool duplicateCount(int n, IEnumerable<int> collection)
{
return (from item in collection
group by item into grp
select grp.Count()).Any(count => count == n)
}
答案 1 :(得分:0)
lambda表达式以外的东西
List<int> list = new List<int>() { 1, 2, 3, 3, 3, 4, 4, 4, 4,2,2,2, 2, 2, 2, 5, 5, 5, 5 };
var q = (from i in list
where i == 2
select i).Count();