2010-08-11 5 views
1

NSNumbers (정수)를 포함하는 NSArray를 멋진 영어로 읽을 수있는 문자열로 변환하는 좋은 정리 루틴을 찾고 있습니다. 이에과제 : 숫자의 NSArray를 영어로 읽을 수있는 목록으로 변환하는 방법

[NSArray arrayWithObjects:[NSNumber numberWithInt:5], 
          [NSNumber numberWithInt:7], 
          [NSNumber numberWithInt:12], 
          [NSNumber numberWithInt:33], nil]; 

: 예를 들어, 나는 이것을 변경할

5, 7, 12, 13

경우 무시 무시한없이이 일을 어떤 좋은 방법이 있나요 성명 논리? 나는 그것이 정규식으로 할 수 있다고 확신하지만 pre-iOS 4 코드에서 가능합니까?

감사합니다. :)

: - 조

답변

2

봐 엄마, 아니 IFS!

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." 
작동하는지
+0

천재! 감사합니다 :) 그것은 사용자가 동시에 화면에서 다른 항목을 선택할 수있는 멀티 터치 인터페이스입니다. 그래서 평범한 영어로 레이블에 글을 쓸 수 있습니다. 숫자는 선택됩니다. 축하합니다, 당신이이기는 ... 내 감탄! ;-) – jowie

+0

* 혹시이 프로젝트를 실제 프로젝트에 넣지 마십시오 * ;-) – mvds

+0

왜 그렇게 나쁜가요? : -. – jowie

4
NSArray *numbers = [NSArray arrayWithObjects:[NSNumber numberWithInt:5], 
          [NSNumber numberWithInt:7], 
          [NSNumber numberWithInt:12], 
          [NSNumber numberWithInt:33], nil]; 
NSArray *first = [numbers subarrayWithRange:NSMakeRange(0, [numbers count]-1)]; 
NSString *joined = [[first componentsJoinedByString:@", "] stringByAppendingFormat:(([first count] > 0) ? @"and %@" : @"%@"), [numbers lastObject]]; 
+0

이 몰라하지만 모습 그것은해야한다. 멋지다 : D –

+0

이것이 디버깅 용이라면'[anArray description]'을 잊어서는 안된다. – Justin

+1

결과적으로 5를 포함하는 배열의 경우 * "와 5"*가됩니다. –

관련 문제