Удалить дубликаты в одной коллекции c # - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в C #, вот моя проблема

Мой ожидаемый результат - удаление всей строки ABC. Обе строки (с дубликатом ABC) будут удалены.

Мне нужно сделать это итеративным способом. Не могу использовать разные и прочее, как рекомендовано другим постом.

Я пытался удалить дубликаты, но это не сработало.

Поэтому я решил добавить недубликаты в новую коллекцию.

Но это тоже не работает.

CollectionIn -> Моя коллекция образцов

| Folder|    Times 
------------------------
| ABC   |      3       |
| CDE   |      2       | 
| ACD   |      2       |
| ABC   |      1       | 


CollectionOut = new DataTable(); 
CollectionOut.Columns.Add("Folder"); 
CollectionOut.Columns.Add("Times");

bool duplicate = false;

for (int i = 0; i < CollectionIn.Rows.Count; i++) 
{
 string value1 = CollectionIn.Rows[i].ItemArray[0].ToString().ToLower(); 

for (int z = 0; z < i; z++) 
{
 string value2 = CollectionIn.Rows[z].ItemArray[0].ToString().ToLower(); 

   if (value1 == value2)
        {
            duplicate = true;
            break;
        }
    }

  if (!duplicate)
  {
           CollectionOut.Rows.Add(value1); 
           }
}

Может кто-нибудь помочь взглянуть. Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Я бы использовал Linq-To-DataTable:

List<DataRow> duplicates = CollectionIn.AsEnumerable()
    .GroupBy(r => r.Field<string>("Folder"))
    .Where(g => g.Count() > 1)
    .SelectMany(grp => grp)
    .ToList();
duplicates.ForEach(CollectionIn.Rows.Remove);

Это позволит удалить дубликаты из исходной коллекции (DataTable) без создания новой.

0 голосов
/ 03 июля 2018

Поскольку вы не хотите использовать Distinct, вы не можете сделать это с помощью LINQ, например:

var newList = myList.GroupBy(s=>s).Where(s => s.Count() == 1).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...