无法在C#中进行简单的列表操作

时间:2011-12-13 16:59:44

标签: 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.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
    }

3 个答案:

答案 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执行此操作的简单方法),您应该打破排序并删除重复项两种不同的方法。删除重复项的方法应该接受列表作为参数(就像这样做),并返回没有重复项的新列表实例。