Преобразование NSString информации о вершинах в многомерный массив - Цель C - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть NSString информации о вершинах, такой как:

"0,943182 0,95878 0 0,853249 0,956043 0 0,795583 0,954268 0 0,738116 0,954268 0"

Мне нужно добавить запятые между каждым значением, сгруппировать вершины в группы по три, а затем добавить три значения в массив (который я затем добавлю в многомерный массив для использования с OpenGL ES).

Кто-нибудь может посоветовать, как можно вставить запятые и сгруппировать данные?

Спасибо!

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Довольно просто:

Разорвать строку.

NSArray *nums = [theString componentsSeparatedByString:@" "];

Выделить / инициализировать массив групп, в котором будут храниться группы.

NSMutableArray *groups = [NSMutableArray arrayWithCapacity:10];

Зацикливать компоненты исходной строки и разделять группы на "," с ними.

NSUInteger basetIndex = 0;
NSString *str = @"";
for(baseIndex = 0; baseIndex < [nums count]; baseIndex += 3) {
    str = [str stringByAppendingFormat:@"%@,%@,%@", [nums objectAtIndex:baseIndex],
                                       [nums objectAtIndex:baseIndex+1],
                                       [nums objectAtIndex:baseIndex+2]];
    [groups addObject:str];
    str = @"";
    // or str = [NSString stringWithFormat:...] and no str = @""
}

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

0 голосов
/ 15 февраля 2012

Пожалуйста, попробуйте следующее решение.

NSString *str  = @"0.943182 0.95878 0 0.853249 0.956043 0 0.795583 0.954268 0 0.738116 0.954268 0";
NSArray *arr = [str componentsSeparatedByString:@" "];
NSUInteger cnt = 0;
NSMutableArray *multilist = [[NSMutableArray alloc] init];
NSString *temp = @"";
for (NSString *comp in arr ) {

    cnt++;
    if( cnt == 3 )
    {
        cnt = 0;
        temp = [temp stringByAppendingFormat:@"%@" ,comp];
        [multilist addObject:temp];
        temp = @"";
    }
    else
    {
        temp = [temp stringByAppendingFormat:@"%@ ," ,comp];
    }
}
NSLog(@"%@",multilist);
[multilist release];
0 голосов
/ 15 февраля 2012

Вместо того, чтобы сначала вставлять запятые в строку, я бы просто сканировал строку шаг за шагом:

NSString *str = @"0.943182 0.95878 0 0.853249 0.956043 0 0.795583 0.954268 0 0.738116 0.954268 0";
NSScanner *scanner = [NSScanner scannerWithString:str];
typedef struct { float x, y, z; } vertex;
while (YES) {
    vertex v;
    if (! ([scanner scanFloat:&v.x] && [scanner scanFloat:&v.y] && [scanner scanFloat:&v.z]))
        break;
    NSLog(@"%f, %f, %f", v.x, v.y, v.z);
    // put the vertex in some container
}
...