你如何加入[Number numberWithChar:c]的NSArray进入NSString?

时间:2011-10-13 01:59:51

标签: objective-c join nsstring nsarray char

当我使用componentsJoinedByString时,我只会得到一长串数字。

编辑:我意识到这个任务令人困惑。如果他们想要一个NSString,为什么有人会在NSArray中填充NSNr?答案是我正在编写一个可扩展的单元测试框架。基本函数genNumgenBoolgenChar分别生成带有随机int,BOOL和char值的NSNumbers。然后有genArray使用指定的生成器生成随机数组。因此,要构造一个随机NSString,可以使用genArray生成器运行genChar,并将生成的NSArray转换为NSString。

由于技术性原因,字符仅存储为NSNumber而不是chargenArray接受一个块并调用块100次以填充NSArray。块必须包含ObjC对象;不是原始类型。

所以问题仍然存在:你如何加入[NSNumber numberWithChar:c]的NSArray进入NSString?

4 个答案:

答案 0 :(得分:1)

componentsJoinedByString将数组元素连接成一个字符串,它们之间有分隔符。使用NSString方法将数组元素转换为字符串(如果还没有description“。如果你有NSNumbers的n数组,我希望得到一个有趣的结果。

答案 1 :(得分:1)

为什么不用[NSString stringWithCharacters:c length:1]填充数组?然后componentsJoinedByString:应该工作。 (查看stringWithCharacters:length:上的文档;以上内容仅供参考。例如,您可能必须使用&c。)

答案 2 :(得分:1)

+ (NSString *) genString {
    NSArray* arr = [self genArray: ^() { return [ObjCheck genChar]; }];

    NSMutableString* s = [NSMutableString stringWithCapacity: [arr count]];

    int i;
    for (i = 0; i < [arr count]; i++) {
        [s appendString: [NSString stringWithFormat: @"%c", [[arr objectAtIndex: i] charValue]]];
    }

    return s;
}

答案 3 :(得分:0)

+ (id)genString {
    NSArray *chars = [self genArray:^{ return [ObjCheck genChar]; }];

    if ([chars count] == 0) {
        return @"";
    }

    unichar *buffer = malloc(sizeof(unichar) * [chars count]);

    [chars enumerateObjectsUsingBlock:^(NSNumber *num, NSUInteger idx, BOOL *stop) {
        buffer[idx] = (unichar)[num charValue];
    }];

    return [[[NSString alloc] initWithCharactersNoCopy:buffer length:[chars count] freeWhenDone:YES] autorelease];
}

此特定解决方案将假设字符&gt; 127应被视为unicode代码点(对于字符大小的值,这基本上意味着为ISO-8859-1)。它还避免在创建结果字符串时复制缓冲区。