2013-02-11 37 views
1

使用LINQ的所有电话号码,我怎样才能数组排序和回归后更小巧的所有号码,则X数组排序并返回较小,那么X

对于排序我使用:(这是一个好的)

var sorted =(从数组中的数字orderby number ascending select number).ToArray();

所以我有它排序在'排序'数组。

我怎样才能返回它更小巧然后X.

+2

。其中(x => x <...) – 2013-02-11 11:00:59

+0

可以请您发帖吗?我是LINQ的新手。 – 2013-02-11 11:01:53

+0

Tim Schmelter回答如下 – 2013-02-11 11:55:32

回答

2

为什么要在之前对进行排序?这是低效率的,而不是先筛选并订购休息:

var sorted = array.Where(i => i < x).OrderBy(i => i).ToArray(); 

或查询语法:

var sorted = (from i in array 
       where i < x 
       orderby i 
       select i).ToArray(); 

Order of LINQ extension methods does not affect performance?(标题有误导之嫌,其实OrderBy是例外情况的顺序问题之一正如E.Lippert在他的回答中所解释的那样)

+0

如何测量这种方法的复杂性? – 2013-02-11 11:13:32

+0

@ slash1z:我假设它是** O(n)**,因为'Enumerable.Where'需要枚举数组以找到所有低于'x'的数字。剩下的将由具有** O(N log N)**复杂性的'Enumerable.OrderBy'命令。 – 2013-02-11 11:16:11

+0

你可以建议如何看看这个'(从数字顺序中的数字降序选择数字).Distinct()',它是O(n)导致它正在通过数组中的每个值像一个简单的循环, Distinct()或Where()子句不会增加更多复杂性,对吧? – 2013-02-11 12:00:33

1
var result = from n in array 
      where n < value 
      orderby n 
      select n; 

还是在方法的语法所有数字:

var result = array.Where(n => n < value).OrderBy(n => n); 

您可以使用也可以使用TakeWhile如果你已经整理阵列

var result = sortedArray.TakeWhile(n => n < value); 

请记住,最好在排序前过滤序列。为什么?因为当你排序时,所有项目都存储在内部的排序结构中。因此,您必须排序的项目越少,代码运行的速度就越快(并且使用更少的内存)。