2016-05-31 5 views
-1

申し訳ありませんが、おそらくあまりにも愚かです。私はたくさんの検索をしていて、それを行う方法を見つけることができませんでした。私は2つのNSArraysを持っています。最初のものは少しトリッキーで、各オブジェクトに2つ以上の価格を持つことができますが、価格はオブジェクト内のコンマで区切られます。 2番目の方法は簡単で、個々のオブジェクトに1つの価格が割り当てられています。価格がNSStringsを含む合計配列

私の目標は、各アレイ内のすべての数値を合計し、両方の合計量を取得することです。

私は2つの問題を扱っていました。最初は、各オブジェクトに "$"があり、もう1つは上記のとおりです。 firstArrayは、動作するのが難しくなるような方法で構築されたという事実です。

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

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

アレイにはゴミが含まれています。最初にそれらを整理し、 'NSNumber(float)'値の配列を作成します。 – trojanfoe

答えて

1

願っています! secondArrayのための同様

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); 

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); 

コンソール:

myFirstArray :: 1610

mySecondArray :: 4750

合計:: 6360

+0

これは本当に素晴らしいです、ありがとうございます。これを行う主な理由は、MKMapViewでdidRegionChangedを使用して、表示されているタイトルの注釈を価格でカウントすることです。 – tomasfn

+0

@tomasfnこれはあなたを助けてくれてうれしいです..これがあなたの問題を解決したら、答えを受け入れてください。 – Sujania

0

あなたはアレイ内のすべての数字を合計する場合は、最初にすべてのstringByReplacingOccurrencesOfStringを使用して、すべてそのスペース、カンマや$を削除します。次に、配列内のすべての数値の合計を計算できます。次のコードその使用のための

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

{ 

    sum += [num intValue]; 
} 

二番目の配列に同じ操作を行います。これはあなたを助けるかもしれ

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

{ 

    sum += [num intValue]; 
} 
0

あなたの配列が唯一のスペースが含まれている場合、コンマと「$」の文字が最初の配列のために、次のコードを使用し

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

を使用するためにこのコードはあなたを助けることがあります。

-(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; 
} 
2

あなたの配列の定義は乱雑です。それはJSONからですか?

YESの場合:

-(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\"]"]; 

ない場合は、単に平坦化方法及び "$" の文字を除去することを検討してください。

関連する問題