考虑以下代码
NSString *param_string @"1:3:6:10:15:22:28:30";
NSArray *params = [param_string componentsSeparatedByString:@":"];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterNoStyle];
NSMutableArray *convertedArray = [[NSMutableArray alloc] initWithCapacity:[params count]];
for(int i = 0; i < [params count]; i++){
[convertedArray insertObject:[formatter numberFromString:[params objectAtIndex:i] atIndex:i]];
}
有没有更好,更有效的方法来实现这一目标?最初的param_string在实践中可能会更长,但我不希望params数组中有超过200个元素。
由于
答案 0 :(得分:7)
这个怎么样。
向NSString添加类别
@interface NSString(MyConverter)
-(NSDecimalNumber*) decimalNumberValue;
@end
@implementation NSString(MyConverter)
-(NSDecimalNumber*) decimalNumberValue
{
return [NSDecimalNumber decimalNumberWithString: self];
}
@end
现在你可以这样做
NSString *param_string @"1:3:6:10:15:22:28:30";
NSArray *params = [param_string componentsSeparatedByString:@":"];
NSArray* decimalNumbers = [params valueForKey: @"decimalNumberValue"];
显然,如果你想要一个除NSDecimalNumber之外的其他对象,只需相应地改变你的类别。该方法只需返回一个可以放入数组的对象。
答案 1 :(得分:0)
NSString
有一个实例方法intValue
可能会让这更直接。
NSNumber *value = [NSNumber numerWithInt:[[params objectAtIndex:i] intValue]];
现在将value
插入数组中。如果字符串总是这么简单,那么你真的不是一个数字格式化器。
答案 2 :(得分:0)
你可以使用NSScanner
并避免2个循环(一个在componentsSeparatedByString
内,一个填充你的可变数组。)
使用NSScanner
,你可以用一个只有一个数组(可变数组)完成你的目标。