我正在尝试用list创建一个函数。 它是排序和删除重复项。 它排序很好,但不删除重复项。 有什么问题?
void sort_del(List<double> slist){
//here i sort slist
//get sorted with duplicates
List<double> rlist = new List<double>();
int new_i=0;
rlist.Add(slist[0]);
for (i = 0; i < size; i++)
{
if (slist[i] != rlist[new_i])
{
rlist.Add(slist[i]);
new_i++;
}
}
slist = new List<double>(rlist);
//here get without duplicates
}
答案 0 :(得分:7)
它不起作用,因为slist
是按值传递的。为其分配rlist
对呼叫者的结束没有影响。你的重复检测算法似乎很好。如果您不想在其他答案中使用更优雅的LINQ方式,请更改方法以返回列表:
List<double> sort_del(List<double> slist){
// Do your stuff
return rlist;
}
答案 1 :(得分:4)
double
您可以使用Distinct()
slist = new List<double>(rlist.Distinct());
或者也许:
slist.Distinct().Sort();
答案 2 :(得分:0)
您没有修改基础列表。您正在尝试添加到新集合,而不是检查新集合是否正确包含旧集合。
如果您需要为家庭作业执行此操作(这似乎很可能,因为有其他人指出的数据结构和使用LINQ执行此操作的简单方法),您应该打破排序并删除重复项两种不同的方法。删除重复项的方法应该接受列表作为参数(就像这样做),并返回没有重复项的新列表实例。