Использование метода Distinct()
примерно в 4 раза быстрее, чем использование GroupBy () в моих неформальных тестах. Для одного миллиона Foo мой тест имеет Distinct () примерно за 0,89 секунды, чтобы создать уникальный массив из неуникального массива, где GroupBy () занимает около 3,4 секунды.
Мой вызов Distinct () выглядит так,
var unique = list.Distinct(FooComparer.Instance).ToArray();
и FooComparer
выглядит,
class FooComparer : IEqualityComparer<Foo> {
public static readonly FooComparer Instance = new FooComparer();
public bool Equals(Foo x, Foo y) {
return x.id.Equals(y.id);
}
public int GetHashCode(Foo obj) {
return obj.id.GetHashCode();
}
}
и моя GroupBy()
версия выглядит,
var unique = (from l in list group l by l.id into g select g.First()).ToArray();