讓我們假設我有一組點(PointCollection
)。 我想要做的是在這些點之間找到X和Y座標的最小值。 很明顯,人們可以遍歷集合並逐步檢查座標。PointCollection中的X和Y座標的最小值(C#)
我想知道是否有更快更有效的解決方案。
你有什麼想法嗎?
謝謝
讓我們假設我有一組點(PointCollection
)。 我想要做的是在這些點之間找到X和Y座標的最小值。 很明顯,人們可以遍歷集合並逐步檢查座標。PointCollection中的X和Y座標的最小值(C#)
我想知道是否有更快更有效的解決方案。
你有什麼想法嗎?
謝謝
更快鍵入?也許:
var xMin = points.Min(p => p.X);
var yMin = points.Min(p => p.Y);
但是,這執行多單foreach
環慢:
bool first = true;
foreach(var point in points) {
if(first) {
xMin = point.X;
yMin = point.Y;
first = false;
} else {
if(point.X < xMin) xMin = point.X;
if(point.Y < yMin) yMin = point.Y;
}
}
我正在尋找最快的解決方案。你爲什麼認爲第一個會比較慢? – Jamie 2010-11-22 12:28:49
此代碼也檢查一個沒有必要的,如果每次只是分配xmin和ymin int.MaxValue,然後使用foreach和身體只是其他塊 – 2010-11-22 12:29:01
@HPT - 好吧,這是一個很好的補充。 @Jamie - 因爲a:它循環兩次而不是一次,b:LINQ使用最不常見的分母方法 - 它不能使用爲集合類型定義的任何自定義迭代器,並且必須執行額外的委託調用。 – 2010-11-22 12:44:31
獲得最低x和y位置seperately,使用
var lowestX = pointCollection.Min(p => p.X);
var lowestY = pointCollection.Min(p => p.Y);
如果你想具有最低組合X和Y位置的那個,使用
var lowest = pointCollection.Min(p => p.X + p.Y);
'Min'不會是'Point'... – 2010-11-22 12:23:59
Ops。現在我的答案已修復。 – 2010-11-22 12:27:13
所以你想要兩點? X最低和Y最低的一個,或者X和Y最低的一個? – 2010-11-22 12:20:08
除非它們已經被排序,否則沒有比檢查它們更快的任何東西 – smirkingman 2010-11-22 12:21:07