如何将 NSArray 元素加入 NSString?

Posted

技术标签:

【中文标题】如何将 NSArray 元素加入 NSString?【英文标题】:How to join NSArray elements into an NSString? 【发布时间】:2009-09-07 03:32:13 【问题描述】:

给定一个由 NSString 组成的 NSArray,有没有一种快速的方法可以将它们组合成一个 NSString(带有分隔符)?

【问题讨论】:

我一定是瞎子!或累。或两者兼而有之…… 如果你在 NSString 文档中搜索这个,你将永远找不到它。它在 NSArray 中! 【参考方案1】:
NSArray * stuff = /* ... */;
NSString * combinedStuff = [stuff componentsJoinedByString:@"separator"];

这是-[NSString componentsSeparatedByString:]的倒数。

【讨论】:

【参考方案2】:

NSArray 上的-componentsJoinedByString: 应该可以解决问题。

【讨论】:

【参考方案3】:

还有这种变体,如果您的原始数组包含键值对象,您只想从中选择一个属性(可以序列化为字符串):

@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 保留了它正在复制的对象,因此您需要在最后执行 return [res autorelease]。也没有理由做 mutablecopy 而不是直接制作一个 mutablestring。 @thewormsterror :忘了说这段代码是为 ARC 准备的。此外,mutablecopy 调用是现代 Objective-c 约定,用于使用 @-syntax 创建对象的可变版本(例如可变 nsarray 的 [@[] mutablecopy])。不知道它对性能有何影响。

以上是关于如何将 NSArray 元素加入 NSString?的主要内容,如果未能解决你的问题,请参考以下文章

将NSArray中的每个NSString元素显示为UIButton Objective C

NSArray 与字符串

NSMutableArray-->NSString

如何根据 nsarray 过滤谓词

NSArray 作为核心数据 fetchRequest 中的参数

将 NSString 转换为字符的 NSArray [重复]