代码之家  ›  专栏  ›  技术社区  ›  acqu13sce

将nsstring数组转换为NSNumbers的更好方法

  •  2
  • acqu13sce  · 技术社区  · 14 年前

    考虑以下代码

    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]];
    }
    

    3 回复  |  直到 14 年前
        1
  •  7
  •   JeremyP    14 年前

    这个怎么样。

    向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"];
    

    很明显,如果你想要一个非小数的对象,只需要相应地改变你的类别。方法只需返回一个可以放入数组的对象。

        2
  •  0
  •   Alex Wayne    14 年前

    NSString 有一个实例方法 intValue 这可能会让事情变得更简单。

    NSNumber *value = [NSNumber numerWithInt:[[params objectAtIndex:i] intValue]];
    

    value 进入阵列。如果字符串总是这么简单,你真的不需要一个数字格式化程序。

        3
  •  0
  •   Michael Kessler    14 年前

    你可以用 NSScanner 避免两个回路(一个在里面) componentsSeparatedByString

    NSC扫描仪 你只需要一个数组(可变数组)就可以完成你的目标。