从对象数组中创建逗号分隔字符串的最简单方法(Objective-C)

67

我有一个包含多个对象的NSMutableArray。 我想创建一个逗号分隔的字符串,其中包括每个对象的id值。

4个回答

172
使用NSArray实例方法componentsJoinedByString:
在Objective-C中:
- (NSString *)componentsJoinedByString:(NSString *)separator

在Swift中:

func componentsJoinedByString(separator: String) -> String

例子:

在Objective-C中:

NSString *joinedComponents = [array componentsJoinedByString:@","];
在 Swift 中:
let joinedComponents = array.joined(seperator: ",")

那么我的数组中的对象有4或5个属性,我该如何告诉它仅连接id值? - Jhorra
1
如果您只记录了一个对象,您会得到什么?只有ID值吗?如果是这样,那么使用componentsJoinedBuString:就会得到这些值。尝试一下并查看结果。 - rdelmar
13
如果您想要一个只包含某个属性的数组,您可以做一些非常棒的事情:[<NSArray实例> valueForKey:@"<属性名称的字符串表示>"],它将返回一个只包含该属性的数组。然后在结果上调用componentsJoinedByString:。在幕后,框架正在遍历数组中的所有对象并在它们上调用valueForKey:。键-值编码很棒! - Jack Lawrence
想了解更多KVC集合运算符,请查看此链接:http://nshipster.com/kvc-collection-operators/ - Jay Q.

7

如果你正在寻找 Swift 的相似解决方案,可以使用以下代码:

var array:Array<String> = ["string1", "string2", "string3"]
var commaSeperatedString = ", ".join(array) // Results in string1, string2, string3

为了确保您的数组不包含空值,您可以使用过滤器:

使用过滤器:

array = array.filter { (stringValue) -> Bool in
    return stringValue != nil && stringValue != ""
}

这似乎在Swift中对NSMutableArray不起作用。搜索Google还没有找到答案。 - ultrageek
@Twan 谢谢你,你的回答(几乎)正是我想要的... 几乎,因为我需要连接可选的字符串,其中一些可能为空(所以我不想连接它们),但这个解决方案不接受可选字符串,它要求将它们解包...也许你过去遇到过类似的问题,如果是这样,你能帮助我吗? - cdf1982
@cdf1982 我已经更新了我的答案。你可以使用过滤器方法来做这个。 - Antoine
@Twan太完美了,非常非常非常感谢你!我只是很抱歉这只是一条评论,我无法接受它! - cdf1982

5

从数组创建字符串:

-(NSString *)convertToCommaSeparatedFromArray:(NSArray*)array{
    return [array componentsJoinedByString:@","];
}

从字符串创建数组:

-(NSArray *)convertToArrayFromCommaSeparated:(NSString*)string{
    return [string componentsSeparatedByString:@","];
}

2

Swift

var commaSeparatedString = arrayOfEntities.joinWithSeparator(",")

1
该问题指定了一种编程语言,请考虑将其更改为Objective-C。 - handiansom
@handiansom 那是2012年。 - Aleks N.
是的,我也注意到了。^ ^ - handiansom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接