好吧我有NsMutable数组,其中包含格式的字符串:
32,45,54,5550 etc.
将所有这些字符串转换为nsnumber并获得整个数组之和的最简单方法是什么。
答案 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];
}