NSArray 요소를 NSString에 결합하는 방법은 무엇입니까?


126

NSString의 NSArray가 주어지면 단일 NSString으로 분리하는 빠른 방법이 있습니까?


나는 장님이어야한다! 또는 피곤하다. 또는 둘 다

2
NSString 문서를 검색하면 찾을 수 없습니다. NSArray에 있습니다!
bolnad

답변:


314
NSArray * stuff = /* ... */;
NSString * combinedStuff = [stuff componentsJoinedByString:@"separator"];

이것은의 반대입니다 -[NSString componentsSeparatedByString:].



1

원래 배열에 하나의 속성 만 선택하려는 Key-Value 객체가 포함 된 경우 (이 문자열로 직렬화 할 수있는)이 변형도 있습니다.

@implementation NSArray (itertools)

-(NSMutableString *)stringByJoiningOnProperty:(NSString *)property separator:(NSString *)separator
{
    NSMutableString *res = [@"" mutableCopy];
    BOOL firstTime = YES;
    for (NSObject *obj in self)
    {
        if (!firstTime) {
            [res appendString:separator];
        }
        else{
            firstTime = NO;
        }
        id val = [obj valueForKey:property];
        if ([val isKindOfClass:[NSString class]])
        {
            [res appendString:val];
        }
        else
        {
            [res appendString:[val stringValue]];
        }
    }
    return res;
}


@end

코드에 메모리 누수가 발생하고 mutableCopy는 복사중인 객체를 유지하므로 끝에서 [res autorelease]를 반환해야합니다. 또한 박쥐에서 바로 변경 가능한 문자열을 만드는 대신 변경 가능한 복사를 수행 할 이유가 없습니다.
thewormsterror

@ thewormsterror :이 코드를 언급하는 것을 잊어 버렸습니다. 또한 mutablecopy 호출은 @ 구문을 사용하여 가변 버전의 객체를 만드는 현대적인 objective-c 규칙입니다 (예 : 가변 nsarray의 경우 [@ [] mutablecopy]). 그것이 현명한 성능의 차이점을 모릅니다.
Ben G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.