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