如何确保List <String>只包含序列中的每个字符串一次

Che*_*eso 7 c# linq

假设我有一个字符串列表,如下所示:

var candidates = new List<String> { "Peter", "Chris", "Maggie", "Virginia" };
Run Code Online (Sandbox Code Playgroud)

现在,我想验证另一个List<String>,让我们称之为list1,只包含每个候选人一次.我怎么能这样做,简单?我想我可以用Intersect().我也希望找到失踪的候选人.

private bool ContainsAllCandidatesOnce(List<String> list1)
{
     ????
}


private IEnumerable<String> MissingCandidates(List<String> list1)
{
     ????
}
Run Code Online (Sandbox Code Playgroud)

订单无关紧要.

das*_*ght 5

这在速度方面可能不是最佳的,但是两个查询都足够短以适合单行,并且易于理解:

private bool ContainsAllCandidatesOnce(List<String> list1)
{
    return candidates.All(c => list1.Count(v => v == c) == 1);
}

private IEnumerable<String> MissingCandidates(List<String> list1)
{
    return candidates.Where(c => list1.Count(v => v == c) != 1);
}
Run Code Online (Sandbox Code Playgroud)