Первые три элемента NSArray в NSString? - PullRequest
2 голосов
/ 18 августа 2011

Какой самый эффективный способ превратить первые три объекта (или 1 или 2, если это размер массива) массива в строку, разделенную запятыми.У меня есть ощущение, что есть способ для этого с блоками, но я не могу разобраться с ним

Объекты - это Bands, хранящиеся в bandArray, а атрибуты каждого диапазона включают bandName.

Таким образом, на выходе будет что-то вроде

String
"Abba"                    <- when there is one object
"Abba, Kiss"              <- when there is two objects
"Abba, Kiss, Nirvana"     <- when there is three objects
"Abba, Kiss, Nirvana"     <- when there is four objects. after three, names are ignored

Ответы [ 4 ]

11 голосов
/ 18 августа 2011

Вы можете использовать subarrayWithRange: для этого:

NSString *res = [[[theArray subarrayWithRange:NSMakeRange(0, fmin(3, [theArray count]))] 
                  valueForKey:@"brandName"] 
                 componentsJoinedByString:@", "];
2 голосов
/ 18 августа 2011
NSUInteger count = [bandArray count];
if (count > 3){
    count = 3;
}
NSString * resultString = [[bandArray subarrayWithRange:NSMakeRange(0,count)]  componentsJoinedByString:@", "];
1 голос
/ 18 августа 2011

Может быть не самым быстрым, но самым простым, и кто знает, что яблочное яблоко может сделать несколько умов при создании подмассивов.

[[array subarrayWithRange:NSMakeRange(0,MIN(array.length,3)] componentsJoinedByString:@","];
1 голос
/ 18 августа 2011

Вы можете попробовать следующее (, хотя это полностью не проверено, так как я далеко от моего Mac )

int bandCount = 1;
NSString *bands;
for (NSString *band in bandArray) {
    if (bandCount > 3) break;
    if (bandCount == 1) {
        bands = [NSString stringWithFormat:@"%@", band];
    } else {        
        bands = [NSString stringWithFormat:@"%@, %@", bands, band];
    }
    bandCount ++;
}
...