Смотри мама, нет, если!
NSString *seps[] = {@" and ",@"",@", ",nil,nil,@", "}, *o = @".", *sep = o;
for ( NSNumber *n in [arr reverseObjectEnumerator] ) {
o = [NSString stringWithFormat:@"%@%@%@",n,sep = seps[[sep length]],o];
}
NSLog(@"out: %@",o);
вывод:
out: 5, 7, 12 and 33.
но почему?
редактировать здесь понятная версия с не «огромным , если / иначе построить»
NSString *out = @""; // no numbers = empty string
NSString *sep = @"."; // the separator first used is actually the ending "."
for ( NSNumber *n in [arr reverseObjectEnumerator] )
{
out = [NSString stringWithFormat:@"%@%@%@",n,sep,out];
if ( [sep isEqualToString:@"."] ) // was the separator the ending "." ?
{
sep = @" and "; // if so, put in the last separator " and "
} else {
sep = @", "; // otherwise, use separator ", "
}
}
Это выведет строки типа
0 elements: "" (i.e. empty)
1 element: "33."
2 elements: "12 and 33."
3 elements: "7, 12 and 33."