Reputation: 4100
Is there a way to shorten this code?
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];
}
As you can see, if b
equals 1 I add object1
, if b
is 2, I add both object1
and object2
, and so on.
Upvotes: 0
Views: 107
Reputation: 47699
Sigh!
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>
}
If the entries don't need to be in order you can just use addObject
.
You can also use a variation on the OP's original code:
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];
Upvotes: 1
Reputation: 38475
Here's two alternative answers :
1.
What about doing it dynamically (assuming you can rename object
to object0
to fit the pattern!)
for (uint n = 0; n < b; ++n) {
NSString *name = [NSString stringWithFormat:@"object%i], n];
[allObjects addObject:[self performSelector:name]];
}
However, this is slower at runtime than the other array based answers (you have to make a new string each time wheras their arrays can be made in viewDidLoad
).
2.
Another way would be to use the tag
property of a view - then your loop would become something like :
for (uint n = 0; n < b; ++n)
[allObjects addObject:[self.view viewWithTag:n]];
Upvotes: 1
Reputation: 64002
Put all those strings into a C array:
NSString * objects[] = { object1, object2, object3, object4, object5, object6, object7, object8, object9 };
Then iterate over that once you know what b
's value is:
allObjects = [NSMutableArray array];
for( int i = 0; i < b; i++ ){
[allObjects addObject:objects[i]];
}
Or, even better, do:
allObjects = [NSMutableArray arrayWithObjects:objects count:b];
Upvotes: 3
Reputation: 25011
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)];
Upvotes: 1
Reputation: 17860
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];
Upvotes: 1