在Objective-C中将NSArray转换为NSString


Answers:


534
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];

1
这不会完成与调用[array description]相同的事情吗?
TechZen

9
@TechZen-否,因为会[array description]插入换行符和外部括号。
Dave DeLong

这应该是选择的答案!
pixelfreak 2011年

56
只是想确定一下,但是可以NSString * myString = [array componentsJoinedByString:@""];接受吗?
Mick MacCallum 2012年

10
@ 0x7fffffff:如果数组仅包含“基本”类型,则等效。对于复杂类型,它将把它们字符串化为<ClassName: InstanceAddress>。将valueForKey使得检索每个项目的指定属性。在这种情况下,description是的NSString *属性NSObject,其getter可以被其子类覆盖。
jweyrich

32

一种方法是遍历数组,description在每个项目上调用消息:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    [result appendString:[obj description]];
}
NSLog(@"The concatenated string is %@", result);

另一种方法是根据每个项目的类来做某事:

NSMutableString * result = [[NSMutableString alloc] init];
for (NSObject * obj in array)
{
    if ([obj isKindOfClass:[NSNumber class]])
    {
        // append something
    }
    else
    {
        [result appendString:[obj description]];
    }
}
NSLog(@"The concatenated string is %@", result);

如果您需要逗号和其他无关的信息,则可以执行以下操作:

NSString * result = [array description];

如果数组包含许多元素,则首先将所有元素转换为字符串(可能使用-description),然后使用-componentsJoinedByString:with @""作为参数将它们连接起来可能会更有效。
GeorgSchölly09年

除非您只是调试,否则我将采用Dave Delong的方法。
TechZen

17

我认为Sanjay的答案差不多就在那里,但我是这样使用的

NSArray *myArray = [[NSArray alloc] initWithObjects:@"Hello",@"World", nil];
NSString *greeting = [myArray componentsJoinedByString:@" "];
NSLog(@"%@",greeting);

输出:

2015-01-25 08:47:14.830 StringTest[11639:394302] Hello World

正如Sanjay所暗示的-我使用了来自NSArray的componentsJoinedByString方法,该方法确实可以加入并返回NSString

顺便说一句,NSString具有反向方法componentSeparatedByString,它可以进行拆分并使NSArray返回。


10

我最近找到了一个关于Objective-C字符串的非常好的教程:

http://ios-blog.co.uk/tutorials/objective-c-strings-a-guide-for-beginners/

我认为这可能很有趣:

如果要将字符串拆分为数组,请使用名为componentsSeparatedByString的方法来实现此目的:

NSString *yourString = @"This is a test string";
    NSArray *yourWords = [myString componentsSeparatedByString:@" "];

    // yourWords is now: [@"This", @"is", @"a", @"test", @"string"]

如果需要分割几个不同的字符,请使用NSString的componentsSeparatedByCharactersInSet:

NSString *yourString = @"Foo-bar/iOS-Blog";
NSArray *yourWords = [myString componentsSeparatedByCharactersInSet:
                  [NSCharacterSet characterSetWithCharactersInString:@"-/"]
                ];

// yourWords is now: [@"Foo", @"bar", @"iOS", @"Blog"]

但是请注意,分隔符字符串不能为空。如果需要将字符串分成单独的字符,只需循环遍历字符串的长度,然后将每个字符转换为新的字符串:

NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
    NSString *ichar  = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
    [characters addObject:ichar];
}


1
NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
NSString *stringFromArray = [array componentsJoinedByString:@" "];

第一行用对象初始化一个数组。第二行通过在“”内添加字符串来连接该数组的所有元素,并返回一个字符串。


尽管此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的其他上下文,可以改善其长期价值。
唐老鸭

真诚的感谢您的建议!
AbdulAziz Rustam Ogli

1

目标C解决方案

NSArray * array = @[@"1", @"2", @"3"];
NSString * stringFromArray = [[array valueForKey:@"description"] componentsJoinedByString:@"-"];   // "1-2-3"

那些正在寻找解决方案的人 Swift

如果数组包含字符串,则可以使用String的join方法:

var array = ["1", "2", "3"]

let stringFromArray = "-".join(array) // "1-2-3"

在Swift 2中:

var array = ["1", "2", "3"]

let stringFromArray = array.joinWithSeparator("-") // "1-2-3"

在Swift 3和4中

var array = ["1", "2", "3"]

let stringFromArray = array.joined(separator: "-") // "1-2-3"

-1

我知道的方式很简单。

var NSArray_variable = NSArray_Object[n]
var stringVarible = NSArray_variable as String

n是SWIFT语言中This数组中的内部位置。它可能适用于目标C


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.