包含价格的 NSStrings 的数组求和

Sum arrays containing NSStrings which are prices

抱歉问这个问题,也许是太愚蠢了。我进行了很多搜索,但找不到解决方法。我有 2 个 NSArray。第一个有点棘手,每个对象可能有 2 个或更多价格,价格在对象内用逗号分隔。第二个更简单,每个对象都有一个价格。

我的目标是对每个数组中的所有数字求和并得到两者的总数。

我正在处理两个问题,第一个是每个对象都有一个“$”,另一个是上面提到的。事实上,firstArray 是以一种更难使用的方式构建的。

NSArray * myFirstArray = ["$ 22, $ 0", "$ 33, $ 666, $ 66, $ 22", "$ 123, $ 123, $ 555"];

NSArray * mySecondArray = ["$ 120", "$ 22", "$ 20", "$ 10", "$ 11", "$ 0", "$ 1234", "$ 3333"];

如果你想对数组中的所有数字求和,那么首先使用stringByReplacingOccurrencesOfString删除所有的空格、逗号和$。然后你可以对数组中的所有数字求和。

为此使用以下代码:

NSInteger sum = 0;
for (NSNumber *num in myFirstArray)

{

  sum += [num intValue];
}

对第二个数组执行相同操作:

    NSInteger sum = 0;
for (NSNumber *num in mySecondArray)

{

  sum += [num intValue];
}

希望对您有所帮助!

  NSInteger ir = 0;
  NSArray * myFirstArray =[[NSMutableArray alloc]initWithObjects:@"$ 22, $ 0", @"$ 33, $ 666, $ 66, $ 22", @"$ 123, $ 123, $ 555", nil];

   for (int i =0; i<myFirstArray.count; i++) {
    NSArray* foo = [[myFirstArray objectAtIndex:i] componentsSeparatedByString: @","];
    NSLog(@"foo %@",foo);
    for (int j =0; j<foo.count; j++) {
        NSString *rest = [NSString stringWithFormat:@"%@",[foo objectAtIndex:j]];
        NSString* noSpaces =  [rest stringByReplacingOccurrencesOfString:@"$" withString:@""];
        ir = ir +[noSpaces integerValue];
    }
}

NSLog(@"myFirstArray :: %ld",(long)ir);

secondArray 类似:

  NSInteger ir1 = 0;
  NSArray * mySecondArray =[[NSMutableArray alloc]initWithObjects:@"$ 120", @"$ 22", @"$ 20", @"$ 10", @"$ 11", @"$ 0", @"$ 1234", @"$ 3333", nil];

  for (int k =0; k<mySecondArray.count; k++) {
             NSString *rest = [NSString stringWithFormat:@"%@",[mySecondArray objectAtIndex:k]];
        NSString* noSpaces =  [rest stringByReplacingOccurrencesOfString:@"$" withString:@""];
        ir1 = ir1 +[noSpaces integerValue];
 }


 NSInteger    Sum = ir + ir1 ;
 NSLog(@"myFirstArray :: %ld",(long)ir);
 NSLog(@"mySecondArray :: %ld",(long)ir1);
 NSLog(@"Sum :: %ld",(long)Sum);

console:

myFirstArray :: 1610

mySecondArray :: 4750

Sum :: 6360

如果您的数组仅包含空格、逗号和“$”字符,请对第一个数组使用以下代码

int totalPrice = 0;
NSString *tempPrice;
NSArray *tempArray;
for (NSString *multiplePriceString in myFirstArray) {
    tempPrice = [multiplePriceString stringByReplacingOccurrencesOfString:@" " withString:@""];
    tempPrice = [multiplePriceString stringByReplacingOccurrencesOfString:@"$" withString:@""];
    tempArray = [tempPrice componentsSeparatedByString:@","];
    for (NSString *price in tempArray) {
        totalPrice = totalPrice + [price intValue];
    }
}

第二个阵列使用

int totalPrice = 0;
NSString *tempPrice;
for (NSString *singlePriceString in myFirstArray) {
    tempPrice = [singlePriceString stringByReplacingOccurrencesOfString:@" " withString:@""];
    tempPrice = [singlePriceString stringByReplacingOccurrencesOfString:@"$" withString:@""];
    totalPrice = totalPrice + [singlePriceString intValue];
}

此代码可能对您有所帮助:

-(int)totalAmountForArray:(NSArray *)arrayToCalculateAmount{

    float amountToReturn = 0.0;

    for (NSString *aValue in arrayToCalculateAmount)
    {
        NSString *aLocalValue = aValue;
        aLocalValue = [aLocalValue stringByReplacingCharactersInRange:NSMakeRange(0, 2) withString:@""];//adjust range length parameter value according to your requirement.

        amountToReturn = amountToReturn + aLocalValue.intValue;
    }

    return amountToReturn;
}

你的数组定义看起来很乱。是来自 JSON 吗?

如果是:

-(NSInteger)sumJSONArrayStr:(NSString *)jsonStr
{
    NSArray *array = [NSJSONSerialization JSONObjectWithData:[jsonStr dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
    NSMutableArray *cleanAndFlatenArray = [[NSMutableArray alloc] init];
    NSMutableCharacterSet *charSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"$"];
    [charSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    for (NSString *aStr in array)
    {
        NSArray *split = [aStr componentsSeparatedByString:@","];
        for (NSString *aSplit in split)
        {
            [cleanAndFlatenArray addObject:[aSplit stringByTrimmingCharactersInSet:charSet]];
        }
    }
    NSNumber *sum = [cleanAndFlatenArray valueForKeyPath:@"@sum.integerValue"];
    return [sum integerValue];
}

通话:

NSInteger val1 = [self sumJSONArrayStr:@"[\"$ 22, $ 0\", \"$ 33, $ 666, $ 66, $ 22\", \"$ 123, $ 123, $ 555\"]"];
NSInteger val2 = [self sumJSONArrayStr:@"[\"$ 120\", \"$ 22\", \"$ 20\", \"$ 10\", \"$ 11\", \"$ 0\", \"$ 1234\", \"$ 3333\"]"];

如果不行,就考虑扁平化的方法,去掉“$”字符。