2015-10-17 31 views
-2

我有一個數組A = [a,b,c],另一個數據B = [d,e,f]。我需要執行這種類型的操作a.d + b.e + c.f(注意:這裏(。)表示複製)並得到結果。我如何使用Objective-C來做到這一點? 在此先感謝。如何乘以NSArray的各個對象並獲得總和?

+2

你嘗試過這麼遠嗎?這是一個非常基本的任務,一個簡單的for循環應該做的。 – luk2302

+0

這不僅僅是一個向量乘法? – Abizern

+0

@ luk2302我試過 'NSArray * a = @ [@(1),@(2)]; NSArray * b = @ [@(3),@(4)]; NSArray * c = [arrayByAddingObjectsFromArray:b]; NSNumber * ssum = [c valueForKeyPath:@「@ sum.self」]; NSLog(@「sum%@」,ssum); ' – floyddd

回答

1
NSNumber *myNum1 = [NSNumber numberWithInt:1]; 
    NSNumber *myNum2 = [NSNumber numberWithInt:2]; 
    NSNumber *myNum3 = [NSNumber numberWithInt:3]; 

    NSArray *a = [NSArray arrayWithObjects: myNum1, myNum2, myNum3, nil]; 
    NSArray *b = [NSArray arrayWithObjects: myNum1, myNum2, myNum3, nil]; 
    int sum=0; 
    for (int i=0; i<[a count]; i++) { 
     NSLog(@"%@", (NSNumber*)[a objectAtIndex:i]); 
     sum =sum +[(NSNumber*)[a objectAtIndex:i] intValue]*[(NSNumber*)[b objectAtIndex:i] intValue]; 
    } 
    NSLog(@"Sum is %d", sum); 

希望這有助於

+1

更好地斷言兩個陣列具有相同的長度;否則你會得到一個範圍例外。 –

2

定義,做這樣的乘法和加法功能:

- (double)multiply:(NSArray <NSNumber *> *)vector1 withVector:(NSArray <NSNumber *> *)vector2 { 
    NSAssert(vector1.count == vector2.count, @"Both arrays should contain the same number of elements"); 

    __block double result = 0; 
    [vector1 enumerateObjectsUsingBlock:^(NSNumber * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     double first = obj.doubleValue; 
     double second = vector2[idx].doubleValue; 
     result += first * second; 
    }]; 

    return result; 
} 

它使用上的NSArray塊枚舉法,給了我在索引和值,我可以使用它來獲取第二個數組中相同索引的值。另請注意,我使用的是一個類型數組,所以在使用它們時我不必將值轉換爲NSNumbers。

現在你可以使用這個函數:

NSArray *a = @[@1, @2, @3]; 
NSArray *b = @[@4, @5, @6]; 
NSArray *c = @[@1, @1, @1]; 

double res1 = [self multiply:a withVector:b]; // => 32.000000 
double res2 = [self multiply:b withVector:c]; // => 15.000000 
double res3 = [self multiply:c withVector:a]; // => 6.000000 
相關問題