删除单个集合C#中的重复项

时间:2018-07-03 14:03:26

标签: c# collections

我是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 :(得分:6)

由于您不想使用Distinct,因此无法使用LINQ来做到这一点,例如:

var newList = myList.GroupBy(s=>s).Where(s => s.Count() == 1).ToList();

答案 1 :(得分:1)

我会使用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)中删除重复项,而不创建新的副本。