删除多次出现的数组元素

Vix*_*inG 1 c# arrays

Array.Distinct()留下不同的元素.如何从Array中删除所有重复元素,包括原始元素?

例如,给定此输入数组:

{ Dog, Cat, Mouse, Dog, Dog, Parrot, Mouse, Hound }
Run Code Online (Sandbox Code Playgroud)

我想得到这个输出:

{ Cat, Parrot, Hound }
Run Code Online (Sandbox Code Playgroud)

p.s*_*w.g 8

你可以使用一点Linq:

var singles = myArray
    .GroupBy(x => x)
    .Where(g => g.Count() == 1)
    .SelectMany(g => g);
Run Code Online (Sandbox Code Playgroud)

或者像这样:

var singles = myArray
    .GroupBy(x => x)
    .Where(g => !g.Skip(1).Any())
    .SelectMany(g => g);
Run Code Online (Sandbox Code Playgroud)
  • GroupBy方法将所有类似的元素收集在一起.
  • Where方法将过滤掉不符合特定条件的组.我提供了两种替代条件,但它们都做同样的事情 - true只有当组中只包含一个元素时它们才会返回:
    • g.Count() == 1计算每个组中元素的数量,true如果结果等于1则返回.
    • !g.Skip(1).Any()true如果第一个之后没有元素,则返回.这实际上比g.Count() == 1因为它不需要枚举组中的所有元素更有效,但它对某些读者来说有点混乱,所以在将其引入生产代码之前要三思而后行.
  • 最后,SelectMany将返回结果集合中的所有元素.由于每个组中只有一个元素,因此只剩下那些不重复的元素.