Могу ли я с помощью LINQ получить список всех элементов типа int, которые встречаются только один раз?
Например
{1,2,4,8,6,3,4,8,8,2}
станет
{1,6,3}
Спасибо!
Могу ли я с помощью LINQ получить список всех элементов типа int, которые встречаются только один раз?
Например
{1,2,4,8,6,3,4,8,8,2}
станет
{1,6,3}
Спасибо!
var result =
from x in xs
group xs by x into grp
where grp.Count() == 1
select grp.Key;
как это?
на 50 секунд позже... :/
Различные методы расширения, которые вы можете использовать:
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());
}