【问题标题】:Convert NSArray to NSString in Objective-C在 Objective-C 中将 NSArray 转换为 NSString
【发布时间】:2010-12-22 04:03:19
【问题描述】:

我想知道如何将 NSArray [@"Apple", @"Pear ", 323, @"Orange"] 转换为 Objective-C 中的字符串。

【问题讨论】:

标签: objective-c arrays nsstring nsarray


【解决方案1】:
NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];

【讨论】:

  • 这和调用 [array description] 不一样吗?
  • @TechZen - 不,因为[array description] 插入换行符和外圆括号。
  • 这应该是选择的答案!
  • 只是想在这里确定一下,但是NSString * myString = [array componentsJoinedByString:@""]; 可以替代这个吗?
  • @0x7fffffff:如果数组仅包含“基本”类型,则等效。对于复杂类型,它会将它们字符串化为<ClassName: InstanceAddress>valueForKey 使其检索每个项目的指定属性。在这种情况下,description 是来自 NSObjectNSString * 属性,其 getter 可以被其子类覆盖。
【解决方案2】:

一种方法是遍历数组,在每个项目上调用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:@"" 作为参数连接它们可能会更有效。
  • 除非您只是调试,否则我会使用这种方法而不是 Dave Delong 的方法。
【解决方案3】:

我认为 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

BTW NSString 有反向方法 componentsSeparatedByString 进行拆分并返回 NSArray

【讨论】:

    【解决方案4】:

    我最近发现了一个关于 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];
    }
    

    【讨论】:

    • 这绝不是在回答问题,是吗?
    【解决方案5】:
    NSString * str = [componentsJoinedByString:@""];
    

    你有 dic 或多个数组,然后在下面使用

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

    【讨论】:

      【解决方案6】:
      NSArray *array = [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil];
      NSString *stringFromArray = [array componentsJoinedByString:@" "];
      

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

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      • 真诚感谢您的建议!
      【解决方案7】:

      Objective 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"
      

      【讨论】:

      • 第一部分(Objective-C)并没有为已有近十年历史的公认答案增加任何价值。其他部分没有回答这个问题,这是明确关于 Objective-C 的。
      【解决方案8】:

      我知道的方法很简单。

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

      n 是数组的内部位置 这在 SWIFT 语言中。 它可能适用于Objective C

      【讨论】:

        【解决方案9】:

        Swift 3.0 解决方案:

        let string = array.joined(separator: " ")
        

        【讨论】:

          猜你喜欢
          • 2018-04-27
          • 2013-03-31
          • 1970-01-01
          • 2011-09-18
          • 2020-10-26
          • 2016-12-17
          • 2012-10-06
          • 2011-12-04
          • 1970-01-01
          相关资源
          最近更新 更多