获取最小值和最大值
问题描述:
所以我有一个自定义对象的数组。我想通过他们去找到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倍一次,但如果你的名单是一个合理的大小,那么差别可能可以忽略不计。
+1,但希望能看到一个博客文章告诉我们如何实现' - (NSArray的*)valuesForKeyPaths:(NSArray的*)paths'现在有效的任何一天... ;-) – Caleb
+1这听起来好多了比我的回答,看起来是正确的。 – chown
作品很有魅力,非常感谢! – Padin215