Как найти одинаковые элементы в массиве и удалить повторяющийся?

Есть массив PointCollection с повторяющимися точками. Как удалить одну из них? Возможно ли это сделать через метод Where?


Ответы (1 шт):

Автор решения: return

Используйте Enumerable.Distinct:

var arr = new[] { <some values> };
var normArr = arr.Distinct(); // массив без дублирующихся значений
Примечание: «Эта операция возвращает объект, перечисляющий элементы входной последовательности source и выдающий последовательность, в которой каждый элемент не эквивалентен предыдущим выданным. Эквивалентность элементов определяется методами GetHashCode и Equals».

"Тру-лоу-левел-импл" (такая же, как и в Enumerable.Distinct, только для массива):

[ThreadStatic]
static readonly HashSet<T> distinctCache = <...>;

public static void Distinct<T>(ReadOnlySpan<T> source, Span<T> target)
{
    // checks skipped

    distinctCache.Clear();

    var copyIndex = 0;

    for (var i = 0; i < source.Length; i++)
        if (!distinctCache.Contains(source[i]))
            target[copyIndex++] = source[i];
}
→ Ссылка