我有大约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;
}
答案 0 :(得分:1)
不确定,为什么不能使用Linq Distinct()
方法,该方法将仅从输入列表中检索唯一项
var distinctItems = allCombos.Distinct().ToList();
答案 1 :(得分:0)
据我从RemoveTheSame(List<String> lista, List<String> listb)
所看到的,您可能有三种可能的情况:
您有两个列表:allCombos
和referenceList
您要返回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));
您有两个列表:allCombos
和referenceList
您要返回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();