C#中的Concat错误

时间:2014-01-23 17:05:58

标签: c#

我有一个使用列表的快速排序程序。

错误发生在快速排序函数返回语句中。

  

System.Collections.List不包含Concat的定义和最佳扩展方法System.Collections.Generic.IEnumerableTsource有一些无效的参数。

代码如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {

        Console.WriteLine("Enter the n9o. of elements: ");
        int n = Convert.ToInt32(Console.ReadLine());
        List<int> unsorted = new List<int>();
        Console.WriteLine("Enter the elements: ");
        for (int i = 0; i < n; i++)
        {
            unsorted.Add(Convert.ToInt32(Console.ReadLine()));
        }

        List<int> sorted = quicksort(unsorted);
        foreach (int entry in sorted)
        {
            Console.Write(entry + "\t");
        }

        return;
    } //end of main.

    public static List<int> quicksort(List<int> given)
    {
        if (given.Count == 1)
            return given;
        int mid = given.Count / 2;
        List<int> less = new List<int>();
        List<int> big = new List<int>();
        for (int a = 0; a < given.Count; a++)
        {
            if (given[a] < mid)
            {
                less.Add(given[a]);
            }
            else
                big.Add(given[a]);
        }


        return (quicksort(less).Concat(given[mid]).Concat(quicksort(big)));
    }


}//end of class.

}//end of namespace.

3 个答案:

答案 0 :(得分:5)

您不能Concat int加入IEnumerable<int>。您可以将其包装在一个数组中,Concat将其包装到其他列表中:

return quicksort(less)
   .Concat(new[] { given[mid] })
   .Concat(quicksort(big))
   .ToList();

答案 1 :(得分:2)

由于错误试图告诉您,Concat()方法会将集合的项目连接起来,而不是单个int

答案 2 :(得分:1)

我认为将[mid]添加到结果列表中是一个错误,因为它会将项目添加到结果列表中两次...

另外,你需要针对给定的[mid]而不是

进行测试

所以你应该将你的if语句改为:

        if (given[a] < given[mid])
            less.Add(given[a]);
        else if (given[a] > given[mid])
            big.Add(given[a]);

这假设所有数字都是唯一的,因为如果给定[mid]不是唯一的,那么你就有问题