[c#]使用 LINQ 的快速排序

标签: Linq C#
发布时间: 2017/2/28 22:46:24
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我正在使用 LINQ 和仿制药的原始快速排序算法,但我碰到一些问题,主要与类型推理。

下面是代码

private static List<T> Quicksort<T>(IEnumerable<T> list) 
            where T : IComparable, IComparable<T>
        {
            if (!list.Any()) 
                return new List<T>();

            var first = list.First();
            var smallerAndLarger = list.Skip(1).GroupBy(n => n >= first);

            return new List<T>
                (Quicksort(smallerAndLarger.Where(x => !x.Key)).Add(first))
                .AddRange(Quicksort(smallerAndLarger.Where(x => x.Key)));
        }

编译器抱怨这条线

var smallerAndLarger = list.Skip(1).GroupBy(n => n >= first);

说类型 T 将不支持比较操作,但定型在方法签名中, T 应执行 IComparable 和通用的版本,所以这工作吗?

解决方法 1:

问题是您使用 > = (即︰ n => n > = 第一次),除非不可用的类型定义如何使用的运算符 (IComparable 不)。

而不是使用 gt/lt/情商运算符,使用和 (http://msdn.microsoft.com/en-us/library/system.icomparable.compareto(v=vs.110).aspx),确定优先顺序︰

n => n.CompareTo(first) >= 0
赞助商