C# Список - Удалить дубликаты - PullRequest
0 голосов
/ 25 мая 2020

У меня есть список, который выглядит так:

U-70754, U-70755
U-70754, U-70755
U-70754, U-70755, U-70786, U-70787, U-70788
U-70754, U-70755, U-70786, U-70787, U-70788
U-70754, U-70755, U-70786, U-70787, U-70788
U-70754, U-70755, U-70786, U-70787, U-70788

Я ищу способ удалить дубликаты и изменить порядок списка, чтобы список выглядел так:

U-70754
U-70755
U-70786
U-70787
U-70788

Я не могу осмыслить эту проблему, надеюсь, кто-то может помочь.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Если я правильно понимаю структуру вашего списка, похоже, что каждый элемент может содержать несколько строк, разделенных запятыми. В этом случае вы можете получить то, что ищете, с помощью нескольких дополнительных строк:

var filteredList = list.SelectMany(x => x.Split(","))
                       .Select(x => x.Trim())
                       .Distinct()
                       .OrderBy(x => x);

Вот. NET Fiddle , демонстрирующий это в действии.

РЕДАКТИРОВАТЬ : Я вижу, что Павел избил меня, по сути, с тем же ответом, но этот код Trim s Разделение строк (без которых они не будут правильно сортировать), а затем явно упорядочивает их поскольку Distinct, скорее всего, сохранит только исходный порядок.

1 голос
/ 25 мая 2020

Вы можете разделить каждый элемент запятой, сопоставить результат с одной последовательностью, используя SelectMany, а затем использовать метод Distinct, чтобы получить уникальные значения

var list = new List<string>
{
    "U-70754, U-70755",
    "U-70754, U-70755",
    "U-70754, U-70755, U-70786, U-70787, U-70788",
    "U-70754, U-70755, U-70786, U-70787, U-70788",
    "U-70754, U-70755, U-70786, U-70787, U-70788",
    "U-70754, U-70755, U-70786, U-70787, U-70788"
};

var result = list.SelectMany(i => i.Split(new [] { ',' })).Distinct().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...