获取最小值和最大值

问题描述:

所以我有一个自定义对象的数组。我想通过他们去找到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 

我想不通为什么这个代码是行不通的。

这条线......

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