C# Can';t在C语言中进行简单的列表操作#
我想用list做一个函数。 它是排序和删除重复项。 它排序很好,但不要删除重复。 有什么问题吗C# Can';t在C语言中进行简单的列表操作#,c#,C#,我想用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
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
}
void排序删除(列表列表){
//我在这里分类
//按重复项排序
List rlist=新列表();
int new_i=0;
rlist.Add(slist[0]);
对于(i=0;i
使用double
只需使用Distinct()
它不起作用,因为
slist
是按值传递的。将rlist
分配给它对调用方端没有影响。您检测重复项的算法似乎很好。如果您不想使用另一个答案中建议的更优雅的LINQ方式,请更改方法以返回列表:
List<double> sort_del(List<double> slist){
// Do your stuff
return rlist;
}
List sort\u del(List slist){
//做你的事
返回rlist;
}
您没有修改基础列表。您试图添加到新集合,但未检查新集合是否正确包含旧集合之一
如果作业需要这样做(这似乎是可能的,因为有其他人指出的数据结构和使用LINQ实现这一点的简单方法),那么应该将排序和消除重复分为两种不同的方法。删除重复项的方法应该接受一个列表作为参数(就像这个一样),并返回没有重复项的新列表实例。除非LINQ to Objects库可以进行查询优化,否则slist.Sort().Distinct()会更好。请看,我认为对较少的对象进行排序会更快
slist.Distinct().Sort();
List<double> sort_del(List<double> slist){
// Do your stuff
return rlist;
}