【问题标题】:Selecting specific points from array points从数组点中选择特定点
【发布时间】:2013-08-12 15:13:22
【问题描述】:

我有 Points 数组(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");

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

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

【问题讨论】:

  • 你的问题不清楚(12 怎么比 27 大?)但我想你想要arrayPoints.Min(x => x.X) and Max(x => x.X)
  • "我需要从这个数组中获取 X 轴上差异最大的两个点。" - 如果我错了,请纠正我,但那总是 max-min

标签: c# .net lambda


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

【讨论】:

  • 您无需对整个数据集进行排序即可获得最小值和最大值。
  • 是的,这样做既能表现得更好,又能在语义上清楚地显示它想要做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多