2011-09-28 205 views
1

所以我有一個自定義對象的數組。我想通過他們去找到maxx,maxy,minx和miny值。我需要最大和最小的分鐘。下面的代碼對我來說是完全有意義的,但是我傾向於從列表中獲得一個隨機值,我的最大值沒有得到最大值或最小值,而分值沒有得到最小值或最大值。獲取最小值和最大值

因此,我從數組中的第一個對象中取出第一個值,然後將每個對象值與我當前的maxx,maxy,minx,miny進行比較,以查看對象的值是大於還是小於,如果是,其分配:

 claimCenterBoundary = [dataCenter.claimCenterBoundaryList objectAtIndex:0]; 
     maxx = claimCenterBoundary.maxx; 
     maxy = claimCenterBoundary.maxy; 
     minx = claimCenterBoundary.minx; 
     miny = claimCenterBoundary.miny; 

     for (int i = 0; i < count; i++) 
     { 
      claimCenterBoundary = [dataCenter.claimCenterBoundaryList objectAtIndex:i]; 
      NSLog(@"minx: %@ miny: %@ maxx: %@ maxy: %@", claimCenterBoundary.minx, claimCenterBoundary.miny, claimCenterBoundary.maxx, claimCenterBoundary.maxy); 

      if (maxx < claimCenterBoundary.maxx) 
       maxx = claimCenterBoundary.maxx; 

      if (maxy < claimCenterBoundary.maxy) 
       maxy = claimCenterBoundary.maxy; 

      if (minx > claimCenterBoundary.minx) 
       minx = claimCenterBoundary.minx; 

      if (miny > claimCenterBoundary.miny) 
       miny = claimCenterBoundary.miny; 
     } 

這裏是我的輸出:

count: 8 
minx: -98.9139404296875 miny: 48.51737594604492 maxx: -98.90547943115234 maxy: 48.52248382568359 
minx: -98.9139404296875 miny: 48.51737594604492 maxx: -98.90547943115234 maxy: 48.52248382568359 
minx: -98.92726898193359 miny: 48.51534652709961 maxx: -98.91975402832031 maxy: 48.52249908447266 
minx: -98.92726898193359 miny: 48.51534652709961 maxx: -98.91975402832031 maxy: 48.52249908447266 
minx: -98.92340850830078 miny: 48.51531219482422 maxx: -98.91383361816406 maxy: 48.52248382568359 
minx: -98.92340850830078 miny: 48.51531219482422 maxx: -98.91383361816406 maxy: 48.52248382568359 
minx: -98.909423828125 miny: 48.51529693603516 maxx: -98.90548706054688 maxy: 48.51742553710938 
minx: -98.96006774902344 miny: 48.51530075073242 maxx: -98.94926452636719 maxy: 48.52977752685547 
final minx :-98.92726898193359 miny: 48.51531219482422 maxx: -98.94926452636719 maxy: 48.52977752685547 

我想不通爲什麼這個代碼是行不通的。

回答

7

這條線......

NSLog(@"minx: %@ miny: %@ maxx: %@ maxy: %@", claimCenterBoundary.minx, claimCenterBoundary.miny, claimCenterBoundary.maxx, claimCenterBoundary.maxy); 

...暗示的-minx-miny-maxx-maxy的返回值都是對象,並且極有可能NSNumber對象。

如果是這種情況,則不能使用<>來比較兩個NSNumbers。你會做指針比較,這絕對是而不是你想要的。

那麼你可以做的,而不是是這樣的:

NSArray *objects = dataCenter.claimCenterBoundaryList; 
NSNumber *minx = [objects valueForKeyPath:@"@min.minx"]; 
NSNumber *miny = [objects valueForKeyPath:@"@min.miny"]; 
NSNumber *maxx = [objects valueForKeyPath:@"@min.maxx"]; 
NSNumber *maxy = [objects valueForKeyPath:@"@min.maxy"]; 

這在技術上是比你原來的建議少4次有效的,因爲你要遍歷整個列表,而不是4倍一次,但如果你的名單是一個合理的大小,那麼差別可能可以忽略不計。

+0

+1,但希望能看到一個博客文章告訴我們如何實現' - (NSArray的*)valuesForKeyPaths:(NSArray的*)paths'現在有效的任何一天... ;-) – Caleb

+0

+1這聽起來好多了比我的回答,看起來是正確的。 – chown

+0

作品很有魅力,非常感謝! – Padin215

相關問題