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

Удаление повторяющихся элементов (дубликатов) из массива - часто встречающаяся задача при разработке приложений на языке программирования C#. В статье приведены примеры исходного кода для решения этой задачи.

Представим, что у нас есть массив целых чисел, содержащий повторяющиеся элементы:

var array = new int[] { 1, 2, 2, 1, 3 };

Чтобы удалить повторяющиеся элементы из него, можно воспользоваться методом Distinct:

var result = array.Distinct().ToArray();

Метод Distinct возвращает последовательность уникальных элементов исходной коллекции, используя для их сравнения объект IEqualityComparer по умолчанию.

Для пользовательских типов можно явно указать объект IEqualityComparer, при помощи которого будут сравниваться элементы исходной коллекции. Подробный пример приведен ниже:

class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

class PersonEqualityComparer : IEqualityComparer
{
    public bool Equals(Person first, Person second)
    {
        return string.Equals(first.FirstName, second.FirstName, StringComparison.OrdinalIgnoreCase) && string.Equals(first.LastName, second.LastName, StringComparison.OrdinalIgnoreCase);
    }

    public int GetHashCode(Person person)
    {
        return person.FirstName.GetHashCode() ^ person.LastName.GetHashCode();
    }
}

...

var array = new Person[]
{
    new Person { FirstName = "Tom", LastName = "Smith" },
    new Person { FirstName = "Tom", LastName = "Smith" },
    new Person { FirstName = "Lisa", LastName = "Brown" },
    new Person { FirstName = "Lisa", LastName = "Brown" },
    new Person { FirstName = "Mark", LastName = "Williams" }
};

var comparer = new PersonEqualityComparer();

var result = array.Distinct(comparer).ToArray();

В примере выше описан тип Person, который содержит два текстовых поля: FirstName и LastName. Будем считать, что два объекта типа Person одинаковы, если значения всех полей у них одинаковы. Также в примере выше описан тип PersonEqualityComparer, который содержит логику сравнения объектов типа Person. Тип PersonEqualityComparer реализует интерфейс IEqualityComparer. Объект типа PersonEqualityComparer используется методом Distinct для нахождения элементов-дубликатов в исходном массиве.

ВКонтакте

Каталог онлайн-сервисов для работы с ВКонтакте. Здесь Вы можете просмотреть статистику страницы любого пользователя ВКонтакте или воспользоваться множеством других онлайн-инструментов для автоматизации различных задач в социальной сети ВКонтакте.

Инстаграм

Каталог онлайн-сервисов для работы с Инстаграм. Здесь Вы можете скачать фотографии и видеозаписи в хорошем качестве из Инстаграм, используя ссылку на запись.