2009-09-07 24 views
119

Với NSArray của NSStrings, có cách nào nhanh chóng kết hợp chúng lại với nhau thành một NSString đơn lẻ (với Dấu tách) không?Làm thế nào để tham gia các phần tử NSArray vào một NSString?

+0

tôi phải bị mù! hoặc mệt mỏi. hoặc cả hai ... – hop

+2

Nếu bạn tìm kiếm tài liệu NSString cho tài liệu này, bạn sẽ không bao giờ tìm thấy nó. Của nó trong NSArray! – bolnad

Trả lời

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

Đây là nghịch đảo của -[NSString componentsSeparatedByString:].

+1

oh cho tình yêu của verbosity ... – Claudiu

1

Ngoài ra còn có biến thể này, nếu mảng ban đầu của bạn chứa các đối tượng Key-Value mà từ đó bạn chỉ muốn chọn một tài sản (có thể được tuần tự như một chuỗi):

@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 
+0

Có một rò rỉ bộ nhớ trong mã của bạn, mutableCopy giữ lại đối tượng nó được sao chép, do đó bạn sẽ cần phải làm trở lại [res autorelease] ở cuối. Ngoài ra không có lý do để làm mutablecopy thay vì chỉ làm một mutablestring thẳng ra khỏi con dơi. – thewormsterror

+0

@thewormsterror: quên đề cập đến mã này là dành cho ARC. Ngoài ra, cuộc gọi mutablecopy là quy ước mục tiêu-c hiện đại để tạo phiên bản có thể thay đổi của các đối tượng bằng cách sử dụng @ -syntax (chẳng hạn như [@ [] mutablecopy] cho một nsarray có thể thay đổi). không biết những gì một sự khác biệt nó làm cho hiệu suất khôn ngoan. –

Các vấn đề liên quan