0

このコードを短縮する方法はありますか?

NSMutableArray *allobjects = [[NSMutableArray alloc] initWithCapacity:b];

    if (b == 1) {
        [allobjects addObject:object];
    }else if (b == 2){
        [allobjects addObject:object];   
        [allobjects addObject:object2];
    }else if (b == 3){

        [allobjects addObject:object];
        [allobjects addObject:object2];
        [allobjects addObject:object3];
    }else if (b == 4){

        [allobjects addObject:object];
        [allobjects addObject:object2];
        [allobjects addObject:object3];
        [allobjects addObject:object4];

    }else if (b == 5){

        [allobjects addObject:object];
        [allobjects addObject:object2];
        [allobjects addObject:object3];
        [allobjects addObject:object4];
        [allobjects addObject:object5];
    }else if (b == 6){

        [allobjects addObject:object];
        [allobjects addObject:object2];
        [allobjects addObject:object3];
        [allobjects addObject:object4];
        [allobjects addObject:object5];
        [allobjects addObject:object6];
    }else if (b == 7){

        [allobjects addObject:object];
        [allobjects addObject:object2];
        [allobjects addObject:object3];
        [allobjects addObject:object4];
        [allobjects addObject:object5];
        [allobjects addObject:object6];
        [allobjects addObject:object7];
    }else if (b == 8){

        [allobjects addObject:object];
        [allobjects addObject:object2];
        [allobjects addObject:object3];
        [allobjects addObject:object4];
        [allobjects addObject:object5];
        [allobjects addObject:object6];
        [allobjects addObject:object7];
        [allobjects addObject:object8];
    }

ご覧のとおり、b1に等しい場合は追加object1し、が2の場合bは、との両方を追加object1object2ます。

4

5 に答える 5

3

これらすべての文字列を C 配列に入れます。

NSString * objects[] = { object1, object2, object3, object4, object5, object6, object7, object8, object9 };

b次に、の値が 何であるかがわかったら、それを繰り返します。

allObjects = [NSMutableArray array];
for( int i = 0; i < b; i++ ){
    [allObjects addObject:objects[i]];
}

または、さらに良いことに、次のようにします。

allObjects = [NSMutableArray arrayWithObjects:objects count:b];
于 2012-05-06T18:27:41.403 に答える
1
NSString* ojbs[] = { object1, object2, object3, object4, object5, object6, object7, object8, object9 };

int _count = 5; // for example

NSArray* arr = [NSArray arrayWithObjects: objs count: _count];
NSMutableArray* result = [NSMutableArray arrayWithCapacity: _count];
[resul addObjectsFromArray: arr];
于 2012-05-06T18:31:49.120 に答える
1
NSArray *allStrings = [NSArray arrayWithObjects:object, object2, object3, object4, object5, object6, object7, object8, object9, nil];

NSArray *objects = nil;
if (b <= [allStrings count])
    objects = [allStrings subarrayWithRange:NSMakeRange(0, b)];
于 2012-05-06T18:34:09.420 に答える
1

2 つの代替回答を次に示します。


1.

動的に行うのはどうですか(パターンに合わせて名前objectを変更できると仮定してください!)object0

for (uint n = 0; n < b; ++n) {
    NSString *name = [NSString stringWithFormat:@"object%i], n];
    [allObjects addObject:[self performSelector:name]];
}

ただし、これは実行時に他の配列ベースの回答よりも遅くなります ( viewDidLoad.


2.

別の方法はtag、ビューのプロパティを使用することです。ループは次のようになります。

for (uint n = 0; n < b; ++n) 
    [allObjects addObject:[self.view viewWithTag:n]];
于 2012-05-06T18:44:20.423 に答える
1

はぁ!

switch (b) {
    case 8 :
        [allobjects insertObject:object8 atIndex:0];
    case 7 :
        [allobjects insertObject:object7 atIndex:0];
    case 6 : 
        [allobjects insertObject:object6 atIndex:0];
    case 5 :
        [allobjects insertObject:object5 atIndex:0];
    case 4 :
        [allobjects insertObject:object4 atIndex:0];
    case 3 :
        [allobjects insertObject:object3 atIndex:0];
    case 2 :
        [allobjects insertObject:object2 atIndex:0];
    case 1 :
        [allobjects insertObject:object atIndex:0];
        break;
    default :
        <Signal error or whatever>
}

エントリを順番に並べる必要がない場合は、単に使用できますaddObject

OP の元のコードのバリエーションを使用することもできます。

if (b >= 1) [allobjects addObject:object];
if (b >= 2) [allobjects addObject:object2];
if (b >= 3) [allobjects addObject:object3];
if (b >= 4) [allobjects addObject:object4];
if (b >= 5) [allobjects addObject:object5];
if (b >= 6) [allobjects addObject:object6];
if (b >= 7) [allobjects addObject:object7];
if (b >= 8) [allobjects addObject:object8];
于 2012-05-06T18:45:50.247 に答える