2010-11-22 32 views
1

讓我們假設我有一組點(PointCollection)。 我想要做的是在這些點之間找到X和Y座標的最小值。 很明顯,人們可以遍歷集合並逐步檢查座標。PointCollection中的X和Y座標的最小值(C#)

我想知道是否有更快更有效的解決方案。

你有什麼想法嗎?

謝謝

+1

所以你想要兩點? X最低和Y最低的一個,或者X和Y最低的一個? – 2010-11-22 12:20:08

+0

除非它們已經被排序,否則沒有比檢查它們更快的任何東西 – smirkingman 2010-11-22 12:21:07

回答

4

更快鍵入?也許:

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; 
    } 
} 
+0

我正在尋找最快的解決方案。你爲什麼認爲第一個會比較慢? – Jamie 2010-11-22 12:28:49

+1

此代碼也檢查一個沒有必要的,如果每次只是分配xmin和ymin int.MaxValue,然後使用foreach和身體只是其他塊 – 2010-11-22 12:29:01

+1

@HPT - 好吧,這是一個很好的補充。 @Jamie - 因爲a:它循環兩次而不是一次,b:LINQ使用最不常見的分母方法 - 它不能使用爲集合類型定義的任何自定義迭代器,並且必須執行額外的委託調用。 – 2010-11-22 12:44:31

1

獲得最低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); 
+0

'Min'不會是'Point'... – 2010-11-22 12:23:59

+0

Ops。現在我的答案已修復。 – 2010-11-22 12:27:13