0

ディスプレイ上のUIオブジェクトの有効なサイズのセットリスト(背景画像が希望どおりに並べて表示される値)があり、各オブジェクトの高さを順番に取得して、次に高い値に切り上げます。そのセットリストで。たとえば、リストに、、、、、およびが含まれている場合、49パスした場合は取得し83、パスした場合は取得し、パスした場合は取得します。有効なサイズの1つを返し、それを各オブジェクトで順番に呼び出すための個別のメソッド。11414817914930495083

私はかなり新しいプログラマーであり、それを行うための効率的な方法を模索しています。私のアイデアは、whileループを実行し、設定値の1つと等しくなるまで値に1を追加してから、その設定値を返すことでした。小数が含まれていないのでこれは機能するはずですが、それが最も安全な方法であるかどうかは疑問です。ループするよりも効率的なアプローチはありますか?私が使用できるサンプルコードやオブジェクトを誰かが提供したい場合は、iPhone用のObjective-Cを使用しています。

4

2 に答える 2

2

ループは正しい方法ですが、適切な値が見つかるまで値の配列をループします。このように、有効なサイズが5つある場合は、ループを最大5回だけ通過します。タイプとしてNSIntegerを使用して短い例を書きました:

- (NSInteger)findValidSize:(NSInteger)aSize
{
    // create a NSArray containing NSNumber objects
    NSArray* validSizes = @[ @49, @83, @114, @148, @179 ];

    for (NSNumber* validSize in validSizes) {
        if (aSize <= [validSize integerValue]) {
            return [validSize integerValue];     // found it
        }
    }

    // nothing valid was found, now what? return the last valid size?
    return [[validSizes lastObject] integerValue];
}
于 2013-03-08T14:09:18.653 に答える
0

あなたはこのようにすることができます:

-(NSInteger)nearestNumberTo:(NSInteger)number{
    NSArray *array=@[@(49), @(83), @(114), @(148), @(179)];
    NSInteger nearest=[array[0]integerValue];
    /*
    for (NSInteger index=0; index<array.count; index++) {
        if ([array[index]integerValue]>=number){
            nearest=[array[index]integerValue];
            break;
        }
    }
    */
    for (NSNumber *num in array) {
        if ([num integerValue]>=number){
            nearest=[num integerValue];
            break;
        }
    }
    return nearest;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
    //49, 83, 114, 148, and 179
    NSInteger minimum=[self nearestNumberTo:86];
    NSLog(@"%ld",minimum);

}
于 2013-03-08T14:20:23.783 に答える