为了好玩,我用Linq在C#中构建了一个quicksort实现:
public static IEnumerable<T> quicksort<T>(IEnumerable<T> input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksort(input.Skip(1).Where(i => i.CompareTo(pivot) <= 0));
var greater = quicksort(input.Where(i => i.CompareTo(pivot) > 0));
return lesser.Append(pivot).Concat(greater);
}
Run Code Online (Sandbox Code Playgroud)
它在大约13秒内对10000个随机整数进行排序.
将其更改为使用int []而不是List会使性能提高约700倍!对相同的10000个随机整数进行排序只需要21ms.
public static T[] quicksortArray<T>(T[] input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksortArray(input.Skip(1).Where(i => i.CompareTo(pivot) <= 0).ToArray());
var greater = quicksortArray(input.Where(i => i.CompareTo(pivot) > 0).ToArray());
return lesser.Append(pivot).Concat(greater).ToArray();
} …Run Code Online (Sandbox Code Playgroud) 有没有办法从C#中的List或任何语言中将参数"展开"到方法/构造函数?这种功能有名字吗?
基本上我想简化这段代码:
var thick = new List<double>{ 1.0, 2.0, 3.0, 4.0 };
var t = new Thickness(thick[0], thick[1], thick[2], thick[3])
Run Code Online (Sandbox Code Playgroud)
我特别询问调用代码,我知道框架可以改变方法声明来获取 params double[].
如果这是不可能的,是否因为类型安全问题?