【问题标题】:getting min and max values获取最小值和最大值
【发布时间】:2011-09-28 21:05:58
【问题描述】:

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

我无法弄清楚为什么这段代码不起作用。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    这一行...

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

    ...暗示-minx-miny-maxx-maxy的返回值都是对象,最有可能是NSNumber对象。

    如果是这种情况,那么您不能使用&lt;&gt; 来比较两个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... ;-)
    • +1 这听起来比我的回答好很多,而且看起来是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2021-06-02
    相关资源
    最近更新 更多