Удалить дубликаты из списка, но сохранить один и редактировать его - PullRequest
2 голосов
/ 02 марта 2020

У меня есть список, который может содержать дубликаты. По этой причине я хочу удалить все дубликаты. Я знаю, что я могу сделать это с помощью метода Distinct() следующим образом:

myList.Distinct().ToList();

Но мне нужно отредактировать элемент в списке, который не был удален из Distinct().

Пример: myList выглядит следующим образом:

(1,'A', "Normal"),
(2,'B', "Normal"),
(3,'A', "Normal"),
(4,'C', "Normal"),
(5,'C', "Normal"),
(6,'A', "Normal");

И результат должен быть следующим:

(1,'A', "Multiple"),
(2,'B', "Normal"),
(4,'C', "Multiple")

Редактировать:

Я также знаю, что я могу сделать это с GroupBy. Тогда у меня также есть все предметы только один раз в моем списке:

myList.GroupBy(x => x.Letter).Select(x => x.First()).ToList();

1 Ответ

7 голосов
/ 02 марта 2020

вы можете использовать linq, чтобы сгруппировать их, а затем спроецировать, поставив условие, что если количество сгруппированных строк равно 1, то это нормально, в противном случае это несколько, например:

var result = list.GroupBy(x => new 
                           { 
                             ID = x.Id, 
                            Text= x.Letter
                         })
                 .Select(x => new Model() 
                             { 
                                ID = x.Key.ID,
                                Letter = x.Key.Letter
                                Type = (x.Count() == 1 ? "Normal" : "Multiple")  
                              });

Revised (это проверяет только дубликаты на основе Только буквы , но не Id):

var result = list.GroupBy(x => x.Letter)
                 .Select(x => new Model() 
                             { 
                                ID = x.First().Id,
                                Letter = x.Key
                                Type = (x.Count() == 1 ? "Normal" : "Multiple")  
                              });

Предполагается, что ваш класс выглядит так:

public class Model
{
       public int ID {get;set;}
       public string Letter {get;set;}
       public string Type {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...