1

使用 LINQ,我可以获得只出现一次的所有 int 元素的列表吗?

例如

{1,2,4,8,6,3,4,8,8,2}

会成为

{1,6,3}

谢谢!

4

3 回答 3

17
var result =
    from x in xs
    group xs by x into grp
    where grp.Count() == 1
    select grp.Key;

像那样?

50秒太晚了......:/

于 2013-03-12T21:55:01.350 回答
11
list.GroupBy(i => i)
    .Where(g => g.Count() == 1)
    .Select(g => g.First());
于 2013-03-12T21:54:11.887 回答
0

您可以使用的各种扩展方法:

public static IEnumerable<T> WhereUnique<T>(this IEnumerable<T> items)
{
    return items.GroupBy(x => x).Where(x => x.Count() ==1).Select(x => x.First());
}

性能可能稍高一些,具体取决于您的数据分布:

public static IEnumerable<T> WhereUnique<T>(this IEnumerable<T> items)
{
    return items.GroupBy(x => x).Where(x => !x.Skip(1).Any()).Select(x => x.First());
}

还有 WhereUniqueBy,它的工作原理与 MoreLinqs 类似DistinctBy()

public static IEnumerable<T> WhereUniqueBy<T, TSelector>(this IEnumerable<T> items, Func<T, TSelector> func)
{
    return items.GroupBy(func).Where(x => x.Count() ==1).Select(x => x.First());
}
于 2018-08-21T15:28:44.600 回答