小编mar*_*v51的帖子

具有Linq性能优势的Quicksort传递T []与IEnumerable <T>

为了好玩,我用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# linq

5
推荐指数
1
解决办法
294
查看次数

为什么我不能使用包含参数的List来调用C#中的方法?

有没有办法从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[].

如果这是不可能的,是否因为类型安全问题?

c#

0
推荐指数
1
解决办法
88
查看次数

标签 统计

c# ×2

linq ×1