令人惊讶的是,我还没有为以下行为找到一个简单的解决方案。
我有一个List,我只想检查(使用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 ...
}
但如果没有更简单的解决方案,我会感到惊讶 (我真的没找到一个)
答案 0 :(得分:8)
分组选项可能是最好的,但您也可以
if (listToCheck.Distinct().Count() != listToCheck.Count())
{
// Do sth.
}
答案 1 :(得分:2)
这应该是确定列表是否有重复的最有效方法
public static bool HasDuplicates<T>(this IEnumerable<T> list)
{
HashSet<T> distinct = new HashSet<T>();
foreach (var s in list)
{
if (!distinct.Add(s))
{
return true;
}
}
return false;
}
所以你可以......
if (listToCheck.HasDuplicates())
{
// Do something ...
}
答案 2 :(得分:1)
我会使用ExtensionMethod
进行此类检查。您可以通过多种方式检查是否存在重复项,但最简单的方法之一是:
public static bool ContainsDuplicates<T>(this IEnumerable<T> list)
{
return list.Any(element => list.Count(e => e.Equals(element)) > 1);
}
答案 3 :(得分:1)
两个解决方案,一个使用GroupBy()
,另一个使用Disctinct()
:
var hasDuplicates = listWithMultipleEntries.GroupBy(x => x).Any(g => g.Count() > 1);
var hasDuplicates = listWithMultipleEntries.Distinct().Count() != listWithMultipleEntries.Count;
答案 4 :(得分:0)
其他解决方案可能是比较元素索引:
List<string> list = new List<string>()
{
"Hello",
"World",
"!",
"Hello"
};
bool hasDuplicates = list.Where((l, i) => list.LastIndexOf(l) != i).Any();
Console.WriteLine(hasDuplicates);
输出:true