Làm cách nào để tham gia các phần tử NSArray vào NSString?


126

Đưa ra một 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 duy nhất (với Dấu phân cách) không?


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

2
Nếu bạn tìm kiếm các tài liệu NSString cho điều này, bạn sẽ không bao giờ tìm thấy nó. Nó ở NSArray!
bolnad

Câu trả lời:


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

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



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à bạn chỉ muốn chọn một thuộc tính (có thể được tuần tự hóa dưới dạng 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

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

@thewormsterror: quên đề cập đến mã này là dành cho ARC. Ngoài ra, lệnh gọi mutablecopy là quy ước object-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 sự khác biệt nào làm cho hiệu suất trở nên khôn ngoan.
Ben G
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.