จะรวมองค์ประกอบ NSArray เข้ากับ NSString ได้อย่างไร?


126

ด้วย NSArray ของ NSStrings มีวิธีที่รวดเร็วในการรวมเข้าด้วยกันเป็น NSString เดียว (พร้อมตัวคั่น) หรือไม่?


ฉันต้องตาบอด! หรือเหนื่อย หรือทั้งสองอย่าง ...

2
หากคุณค้นหาเอกสาร NSString สำหรับสิ่งนี้คุณจะไม่พบมัน มันอยู่ใน NSArray!
bolnad

คำตอบ:


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

-[NSString componentsSeparatedByString:]นี้เป็นสิ่งที่ตรงกันข้ามของ



1

นอกจากนี้ยังมีตัวแปรนี้หากอาร์เรย์เดิมของคุณมีวัตถุคีย์ - ค่าซึ่งคุณต้องการเลือกคุณสมบัติเดียวเท่านั้น (ที่สามารถต่ออนุกรมเป็นสตริงได้):

@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] ในตอนท้าย นอกจากนี้ยังไม่มีเหตุผลที่จะทำ mutablecopy แทนที่จะทำ mutablestring ออกจากไม้ตี
thewormsterror

@thewormsterror: ลืมบอกรหัสนี้สำหรับ ARC นอกจากนี้การเรียก mutablecopy ยังเป็นแบบแผนวัตถุประสงค์ -c ที่ทันสมัยสำหรับการสร้างอ็อบเจ็กต์เวอร์ชันที่ไม่แน่นอนโดยใช้ @ -syntax (เช่น [@ [] mutablecopy] สำหรับ nsarray ที่เปลี่ยนแปลงได้) ไม่รู้ว่าความแตกต่างที่ทำให้ประสิทธิภาพเป็นอย่างไร
Ben G
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.