-2

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

例如4点:

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

我需要从这个数组中得到两个点,X轴上的差异最大。

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

(12:27),(28:27)

如何在 Array 扩展的帮助下获得这些积分,如何编写 Lambda 表达式?

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

或者

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

(我可以使用任何扩展方法,只有 Find() 或 Select())

4

1 回答 1

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然而,并不总是更可取,因为它不是一种稳定的排序 - 但是在这种情况下它并不重要,因为最坏的情况是交换两个相同的点 - 但它们仍然代表空间中的同一个点,所以它应该'不是问题。

于 2013-08-12T15:27:43.507 回答