получение минимальных и максимальных значений - PullRequest
1 голос
/ 29 сентября 2011

так что у меня есть массив пользовательских объектов. я хочу просмотреть их, чтобы найти значения 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

Я не могу понять, почему этот код не будет работать.

1 Ответ

7 голосов
/ 29 сентября 2011

Эта строка ...

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 раза, а не один раз, но если ваш список имеет разумный размер, тогда разница, вероятно, незначительна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...