Помогите сгруппировать индекс массива (objectAtIndex 0 - 9) = 1 место индекса - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь создать тестовое приложение с множественным выбором.У меня есть этот код для считывания файла .txt:

filePath = [[NSBundle mainBundle] pathForResource:@"testBank" ofType:@"txt"];
theBank = [[NSString alloc] initWithContentsOfFile:filePath
                                                  encoding:NSUTF8StringEncoding error:NULL];        
multipleChoicePractice = [theBank componentsSeparatedByString:@"\n"];

Теперь множественный NSHutableArray множественный вывод содержит несколько строк NSS в следующем порядке:

 Question 1
 choice A
 choice B
 choice C
 choice D
 Answer Key
 Rationale
 question ID 1
 [string to id type of question]
 [space 1]
 Question 2
 choice A-2 
 etc etc up to Question 10

Я пытаюсь сгруппировать каждый индексв группах по 10, так что индекс от 0 до 9 функции множественного выбора является индексом 0 нового изменяемого массива questionGroupArary.Я попытался:

for (i=0; i<=90; i = i+10) { //qArr being a NSMutableArray
            [qArr addObject:[multipleChoicePractice objectAtIndex:i]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+1)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+2)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+3)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+4)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+5)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+6)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+7)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+8)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+9)]];

            [questionGroupArray addObject:qArr];
        }

Результатом цикла for является то, что questionGroupArray objectAtIndex: 0 содержит ВСЕ между вопросом 1 и вопросом 10. Каков наилучший способ достижения моей цели, чтобы индекс 0 QuestionGroupArray содержал "question1"к" [пробел 1] "?Я чувствую, что есть способ сделать это с помощью цикла for, но он ускользает от меня.Спасибо!

Ответы [ 3 ]

1 голос
/ 09 августа 2011

Гораздо лучший способ получить подмассив объектов в последовательном диапазоне - использовать -[NSArray subarrayWithRange:].

// Source is your ungrouped array
NSMutableArray* groups = [NSMutableArray array];
for (int i = ; i < 90; i += 10) {
    NSArray* sub = [source subarrayWithRange:NSMakeRange(i, 10)];
    [groups addObject:sub];
}
// groups is now an array of arrays with your groups.
1 голос
/ 09 августа 2011

Создание массива внутри цикла.

for (i=0; i<=90; i = i+10) { //qArr being a NSMutableArray

// Here you have to create a new array for every object
             qArr = [NSMutableArray array];
            [qArr addObject:[multipleChoicePractice objectAtIndex:i]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+1)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+2)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+3)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+4)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+5)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+6)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+7)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+8)]];
            [qArr addObject:[multipleChoicePractice objectAtIndex:(i+9)]];

            [questionGroupArray addObject:qArr];
        }

Другая оптимизация состоит в том, чтобы иметь два цикла for

for(i=0;i<90;i= i+10)
{
qArr = [NSMutableArray array];
for (j=0;i<10;j++)
{
[qArr addObject:[multipleChoicePractice objectAtIndex:j]];
}
}
0 голосов
/ 09 августа 2011

Создайте новый массив для указателя qArray в каждой итерации.Теперь вы просто добавляете один и тот же массив к questionGroupArray несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...