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


Answers:


171

使用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值?
霍拉2012年

1
如果仅记录一个对象,您会得到什么?只是id值?如果是这样,这就是componentsJoinedBuString的作用:请尝试一下。
rdelmar

13
@Jhorra如果您只需要一个属性数组,则可以做一些很棒的事情:[<NSArray instance> valueForKey:@"<string representation of property name>"]它将返回该属性数组。然后调用componentsJoinedByString:结果。在幕后,该框架正在遍历数组中的所有对象并对其进行调用valueForKey:。键值编码很棒!
杰克·劳伦斯

有关更多KVC收集操作员的信息,请查看以下内容: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

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

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

这似乎不适用于Swift中的NSMutableArray。搜索Google尚未揭示答案。
ultrageek

@Twan谢谢,您的答案(几乎)正是我所要的...几乎,因为我需要连接可选字符串,其中一些可能为零(因此我不希望将它们串联),但是此解决方案不接受可选字符串,需要解开它们……也许您过去有过类似的问题,如果可以,可以帮我吗?
cdf1982

@ cdf1982我已经更新了答案。您可以使用filter方法执行此操作。
Antoine

@Twan非常完美,非常非常,非常非常感谢!对不起,这是评论,我不能接受!
cdf1982 2015年

5

从数组创建字符串:

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

从字符串创建数组:

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

2

斯威夫特:)

 var commaSeparatedString = arrayOfEntities.joinWithSeparator(",")

1
该问题指定了一种编程语言。请考虑将其更改为目标-c。
handiansom

@handiansom那是2012
Aleks N.

是的,我也注意到了。^ ^
handiansom
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.