2011-12-13 64 views
2

我试图与列表功能。 这是排序和删除重复。 它排序很好,但不要删除重复项。 什么问题?不能在C#中进行简单的列表操作

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 
    } 

回答

7

因为slist是按值传递它不工作。将rlist分配给它对呼叫者的结束没有影响。你的算法检测重复似乎很好。如果您不想在另一个答案中使用更优雅的LINQ方式,请更改方法以返回您的列表:

List<double> sort_del(List<double> slist){ 
    // Do your stuff 
    return rlist; 
} 
4

double你可以使用Distinct()

slist = new List<double>(rlist.Distinct()); 

或可能:

slist.Distinct().Sort(); 
+0

除非LINQ到对象库能做的查询优化,slist.Sort()。鲜明的()会更好。 – tster 2011-12-13 17:04:33

+0

见我在想,排序较少的对象将是更快 – Joe 2011-12-13 17:06:31

0

您没有修改基础列表。您正在尝试添加到新的集合中,而您并未检查新的集合是否正确包含旧集合。

如果你被要求做这样的家庭作业(看起来很可能,因为有数据结构和简单的方法来与其他人指出的LINQ做到这一点),你应该打破排序和删除重复分成两个独立的方法。删除重复项的方法应该接受一个列表作为参数(就像这样),并返回新的列表实例而不重复。