0

我一直在尝试用 C# 编写自己的快速排序。

但是,当我连接 lower、pivot 和更大的分区时,Visual Studio 告诉我它不能将 void 转换为字符串列表,尽管我不确定连接的 lessList 和 moreList 是如何变为 void 的。

代码片段:

    public List<string> SortFiles(List<string> fileList)
    {
        int listSize = fileList.Count;

        if (listSize <= 1)
        {
            return fileList; //because it is already sorted
        }

        string pivotString = fileList[listSize/2];

        //partition list
        List<string> lessList = new List<string>();
        List<string> moreList = new List<string>();

        foreach (string g in fileList)
        {
            if (String.Compare(g, pivotString) <= 0)
            {
                lessList.Add(g);
            }
            else
            {
                moreList.Add(g);
            }
        }

        lessList = SortFiles(lessList);
        moreList = SortFiles(moreList);

        //concatenate lessList + pivot + moreList
        List<string> sortedFiles = lessList.Add(pivotString); //thinks is void
        sortedFiles = sortedFiles.AddRange(moreList);         //thinks is void

        return sortedFiles;
4

1 回答 1

2

事实是,Add不要AddRange返回带有添加元素(或范围)的新列表。相反,他们将元素添加到列表中,并就地修改它。

实际上,您可以简单地修改代码以执行Addand AddRange,它会起作用。

请注意,这将是相当低效的,因为您正在创建列表并复制很多东西。

于 2013-03-02T11:00:11.070 回答