无法从列表中删除重复项

时间:2018-06-25 14:35:45

标签: c#

我有大约3000件物品的清单,而且我认为有很多重复物品。因此,为了使我的程序运行更快,我想删除它们。这是代码以及函数,当我运行程序时,文本文件为空。

List<string> allCombos = new List<string>();
        string here = RemoveTheSame(allCombos, allCombos);
        System.IO.File.WriteAllText(@"C:\Hodag Image Storage Folder\creo.txt", here);

/////////////////////////////

        private string RemoveTheSame(List<String> lista, List<String> listb)
    {
        List<String> newList = lista;

        newList.AddRange(lista);
        for(int i = 0; i < lista.Count; i++)
        {
            int a = 0;
            for(int ii = 0; ii < listb.Count; ii++)
            {
                if(lista[i] == listb[ii])
                {
                    a += 1;
                    if(a >= 2)
                    {
                        newList.RemoveAt(ii);
                        a = 0;
                    }
                }
            }
        }

        string wat = "";
        for(int i = 0; i < newList.Count; i++)
        {
            wat += newList[i] + " ";
        }


        return wat;
    }

2 个答案:

答案 0 :(得分:1)

不确定,为什么不能使用Linq Distinct()方法,该方法将仅从输入列表中检索唯一项

var distinctItems = allCombos.Distinct().ToList(); 

答案 1 :(得分:0)

据我从RemoveTheSame(List<String> lista, List<String> listb)所看到的,您可能有三种可能的情况:

您有两个列表:allCombosreferenceList您要返回allCombos中所有不在referenceList中的项目:< / p>

  allCombos:     [1, 2, 3, 1, 4, 5, 5]
  referenceList: [1, 2, 4]
  result:        [3, 5, 5] // 1, 2, 4 removed 

解决方案:

   var hashSet = new hashSet(referenceList); 

   allCombos.RemoveAll(item => hashSet.Contains(item));

您有两个列表:allCombosreferenceList您要返回allCombos中所有不在referenceList中的项目;来自allCombos的所有重复项也应删除:

  allCombos:     [1, 2, 3, 1, 4, 5, 5]
  referenceList: [1, 2, 4]
  result:        [3, 5]    // duplicate - second "5" removed

解决方案:

   allCombos = allCombos
     .Except(referenceList)
     .ToList();

您只有一个单个 allCombos列表,并且想要从中删除重复项:

   allCombos:     [1, 2, 3, 1, 4, 5, 5]
   result:        [1, 2, 3, 4, 5] // second 1 and 5 are removed

解决方案:

   allCombos = allCombos
     .Distinct()
     .ToList();