包含价格的 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\"]"];
如果不行,就考虑扁平化的方法,去掉“$”字符。
抱歉问这个问题,也许是太愚蠢了。我进行了很多搜索,但找不到解决方法。我有 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\"]"];
如果不行,就考虑扁平化的方法,去掉“$”字符。