繁体   English   中英

如何将NSRange转换为其值的定界字符串?

[英]How can I convert an NSRange to a delimited string of its values?

给定一个NSRange,例如:

NSRange range = NSMakeRange(1, 22);

将其转换为以逗号分隔的值字符串的最佳方法是什么?

@"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22"

我能想到的最好的办法是遍历该范围并将其值插入NSArray,然后在数组上调用-componentsJoinedByString: 但这似乎很浪费,更不用说优雅了。 有没有更好的办法?

NSMutableString *string=[@"" mutableCopy];
for (int i = range.location; i<range.length-1; i++){
   [string appendFormat:@"%d,", i];
}
[string appendString@"%d", range.length-1];

如果要隐藏代码,则可以将其转换为将范围带入字符串的函数,从而将其隐藏在代码中。 或者也许将其转换为NSString类方法,例如

[NSString stringWithRangeValues:range];

那就像:

+ (NSString *)stringWithRangeValues:(NSRange)range{
        NSMutableString *string=[@"" mutableCopy];
        for (int i = range.location; i<range.lenght-1; i++){
           [string appendFormat:@"%d,", i];
        }
        [string appendString@"%d", range.length-1];
        return [NSString stringWithString:string];

}

我的版本使用数组:

NSMutableArray *vals = [NSMutableArray arrayWithCapacity:range.length];
for (NSUInteger i = range.location; i < range.length; i++){
    [vals addObject:@(i)];
}
NSString *string = [vals componentsJoinedByString:@","];

您可以将NSIndexSet与indexSetWithIndexesInRange:以生成值列表,然后使用enumerateIndexesUsingBlock:对其进行迭代。 例如

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
NSMutableArray *indices = [NSMutableArray array];
[indexSet enumerateIndexesUsingBlock:^(NSUInteger i, BOOL *stop) {
    [indices addObject:@(i)];
}];
NSString *string = [indices componentsJoinedByString:","];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM