Как найти одинаковые элементы в массиве и удалить повторяющийся?
Есть массив 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];
}