如何将NSMutableArray(NSstring)的元素转换为NSNumber并添加它们?

时间:2014-05-19 01:10:35

标签: ios objective-c cocoa-touch nsarray nsnumber

好吧我有NsMutable数组,其中包含格式的字符串:

  32,45,54,5550 etc.

将所有这些字符串转换为nsnumber并获得整个数组之和的最简单方法是什么。

2 个答案:

答案 0 :(得分:4)

您可以使用KVC集合运算符@sum来获取存储在数组中的所有数字字符串的总和

NSArray *numberStrings = @[@"32",@"45",@"54",@"5550"];
NSNumber* sum = [numberStrings valueForKeyPath: @"@sum.self"];
NSLog(@"%@", sum);

输出:5681

对于简单的字符串,它可以工作。但请注意:在本地化中可能存在陷阱。因为我仍然建议使用NSNumberFormatter来创建真正的NSNumber对象,将它们存储在另一个数组中并在其上使用@sum


感谢Bryan Chen让我测试。


为了提高对本地化问题的认识,我想与您分享这个实验:

在德语中,我们使用,来分隔十进制数字,我们使用.对数字中的长数字进行分组。

因此,如果numberString数组可能填充了德语格式的数字,则它可能看起来像@[@"32,5", @"45", @"54", @"5.550,00"]。这个总和是5681.5,但如果我们不改变代码,它就不会失败,但更糟糕的是 - 错误计算:136.55。它只是忽略了逗号之外的所有内容,并将.视为小数分隔符。

让我们使用NSNumberFormatter来修复它:

我的系统设置为德语区域设置

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
nf.locale = [NSLocale currentLocale];
[nf setGroupingSize:3];
nf.usesGroupingSeparator= YES;

NSArray *numberStrings = @[@"32,5", @"45", @"54", @"5.550,00"];
NSMutableArray *numbers = [@[] mutableCopy];

for (NSString *s in numberStrings) {
    NSNumber *n = [nf numberFromString:s];
    [numbers addObject:n];
}


NSNumber* sum = [numbers valueForKeyPath: @"@sum.self"];

NSLog(@"%@", sum);

正确打印5681.5

答案 1 :(得分:1)

NSArray *array = @[ @"1,2", @"3,4" ];
NSUInteger sum = 0;
for (NSString *str in array)
{
    for (NSString *num in [str componentsSeparatedByString:@","])
    {
        sum += [num intValue];
    }
}

NSArray *array = @[ @"1", @"3" ];
NSUInteger sum = 0;
for (NSString *num in array)
{
    sum += [num intValue];
}