如何将NSArray的各个对象相乘并得到总和?

时间:2015-10-17 16:24:44

标签: objective-c nsarray

我有一个数据A = [a,b,c]的数组,另一个数据B = [d,e,f]。我需要执行这种类型的操作a.d + b.e + c.f(注意=这里(。)表示乘法)并得到结果。我怎么能用Objective-C做到这一点? 提前谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

希望这有帮助