从阵列点中选择特定点

时间:2013-08-12 15:13:23

标签: c# .net lambda

我有点数组(Points [])。数组内的所有点都具有相同的Y值。

例如4分:

(12 : 27)
(13 : 27)
(27 : 27)
(28 : 27)

我需要从此数组获得两个点, X 轴的差异最大。

在这个例子中,这些点是:

(12:27),(28:27)

如何借助Array扩展获取这些点,如何编写Lambda表达式?

 Point[] points = Array.Find(arrPoints,"Lambda expression");

OR

 Point[] points = arrPoints.Select("Lambda expression");

(我可以使用任何扩展方法ont仅Find()或Select())

1 个答案:

答案 0 :(得分:0)

Array.Sort(points, (p1, p2) => p1.X.CompareTo(p2.X));
return new[] { points[0], points[points.Length-1] };

注意 - 这首先对数组执行就地排序,这意味着它的顺序会永久更改。

您可以改为:

var pDash = points.OrderBy(p => p.X).ToArray();
return new[] { pDash[0], pDash[pDash.Length-1] };

我个人更喜欢第一种,因为它不涉及两倍的内存使用量。

然而,

Array.Sort并不总是优选的,因为它不是一个稳定的排序 - 但是在这种情况下它并不重要,因为最坏的情况是两个相同的点被交换 - 但它们仍然代表太空中的同一点,所以它不应该是一个问题。