如何将NSArray元素加入NSString?


126

给定NSStrings的NSArray,是否有一种快速的方法可以将它们连接到一个NSString中(使用分隔符)?


我一定是瞎子!还是累 或两者兼而有之

2
如果您在NSString文档中搜索此内容,将永远找不到。它在NSArray中!
bolnad 2014年

Answers:


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]返回。同样,没有理由进行可变拷贝,而不是直接制作可变串。
thewormsterror

@thewormsterror:忘记提及此代码是针对ARC的。另外,mutablecopy调用是现代的Objective-c约定,用于使用@语法创建对象的可变版本(例如,可变nsarray的[@ [] mutablecopy])。不知道它对性能有何影响。
本G
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.