2011-08-09 3 views
0

객관식 시험 응용 프로그램을 만들려고합니다. 나는 10 그룹으로 그룹에 각각의 인덱스를 시도하고도움말 그룹화 Array 색인 (objectAtIndex 0 - 9) = 1 색인점

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 

:

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

가 multipleChoicePractice있는 NSMutableArray 지금의 순서로 NSStrings의 무리가 포함되어 나는 .txt 파일을 읽을 수있는 코드를 가지고 따라서 multipleChoicePractice의 인덱스 0에서 9는 새로운 가변 배열 questionGroupArary의 인덱스 0입니다. 나는 시도 :

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]; 
     } 

루프에 대한 그의 결과는 questionGroupArray objectAtIndex이다 : 0 질문 1과 질문 10 questionGroupArray 지수 0 "question1"에 포함되도록 내 목표를 달성하는 가장 좋은 방법은 무엇입니까 사이의 모든 것을 포함 "[space 1]"? for 루프를 사용하여이 작업을 수행하는 방법이있는 것처럼 느껴지지만 그것은 나를 벗어납니다. 감사!

답변

1

연속 범위에서 객체의 부분 배열을 가져 오는 더 좋은 방법은 -[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. 
+0

이 500 만 포인트를 줄 수있는 방법이 두 가지를 가지고있다? 참으로 매력적이었습니다. 아마도 이것에 대해 며칠을 보냈을 것입니다. – JustAnotherCoder

+0

내가 아는 것은 아닙니다. 그러나 또 다른 행복한 iOS 개발자가 나를 기쁘게합니다. – PeyloW

0

각 반복에서 포인터 qArray에 대한 새 배열을 만듭니다. 이제 동일한 배열을 questionGroupArray에 여러 번 추가하는 것입니다.

1

루프 내부에 배열을 만듭니다.

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(i=0;i<90;i= i+10) 
{ 
qArr = [NSMutableArray array]; 
for (j=0;i<10;j++) 
{ 
[qArr addObject:[multipleChoicePractice objectAtIndex:j]]; 
} 
} 
+0

이걸 빨리 보면서 나는 이것이 효과가 있었을 것이라고 믿는다. ty – JustAnotherCoder

+0

Offcourse이지만 PeyoloW는 더 나은 솔루션을 제공합니다. –

관련 문제