我正在使用 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
和通用版本所以这应该有效?
最佳答案
问题是您对 >= 的使用(即:首先是 n=> n >=),除非类型定义了如何使用运算符(IComparable 没有),否则它不可用。
不使用 gt/lt/eq 运算符,而是使用 CompareTo ( http://msdn.microsoft.com/en-us/library/system.icomparable.compareto(v=vs.110).aspx) 来确定优先级:
n => n.CompareTo(first) >= 0
关于c# - 使用 LINQ 进行快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26894850/