【发布时间】:2015-09-03 12:02:15
【问题描述】:
令人惊讶的是,我还没有找到针对以下行为的简单解决方案。
我有一个列表,我只想检查(使用 Linq)其中是否有多个条目。这意味着,我想得到一个布尔值。
例如:
List<string> listWithMultipleEntries = new List<string>()
{
"Hello",
"World",
"!",
"Hello"
};
这可能是我已经结束的解决方案(我没有进行广泛的测试,但它似乎有效)
if (listToCheck.GroupBy(x => x).Where(g => g.Count() > 1).Select(y => y).Any())
{
// Do something ...
}
但如果没有更简单的解决方案,我会感到惊讶 (我真的没有找到)
【问题讨论】:
-
你不需要最终的
Select(y => y),但除此之外,这个或当前的答案就可以了。 -
listWithMultipleEntries.Distinct().Count() == listWithMultipleEntries.Count;
-
为什么有人使用
Count()?在大多数答案(和这个问题)中,.Skip(1).Any()完全可以工作,如果你将它应用于不是ICollection的IEnumerable会更快。 -
@Oliver 你能给出整个 linq 声明吗?
-
@veritas:我们开始吧:
listToCheck.GroupBy(x => x).Where(g => g.Skip(1).Any()).Any()。但我会删除最后一个Any()并迭代结果以提供有关多次发生的情况的反馈。