我正在尝试计算Swift中两个数组中的值之间的差。我想减去两个数组之间每个索引的值。
我尝试执行以下操作:
var array1 : [Double] = [1, 2, 3, 4, 5]
var array2 : [Double] = [2, 3, 4, 5, 6]
var result = array2 - array1
预期答案:
结果= [1、1、1、1、1]
我收到以下错误消息:
二进制运算符'-'不能应用于两个'[Double]'操作数
以下工作有效:
var array1 : [Double] = [1, 2, 3, 4, 5]
var array2 : [Double] = [2, 3, 4, 5, 6]
let velocity = (0..<5).map { array2[$0] - array1[$0] }
print(velocity)
我想了解是否有一种有效的方法来实现这一目标。
答案 0 :(得分:2)
您的尝试效果很好。通常,您需要检查哪个数组的元素较少(以防万一):
(0..<(min(array1.count, array2.count))).map { array2[$0] - array1[$0] }
或者,正如Connor在他们的答案中提到的那样,使用zip
,它可以为您处理数组长度的比较。
zip(lhs, rhs).map { $0.0 - $0.1 }
您可以再进一步一步,使-
运算符重载以实现所需的语法(array1 - array2
):
func -<T: Numeric>(lhs: [T], rhs: [T]) -> [T] {
return zip(lhs, rhs).map(-)
}
// usage:
print([1,2,3] - [0, 1, 2])
但是请注意,对于其他人而言,可能还不清楚一个数组“减去”另一个数组的含义。
答案 1 :(得分:1)
您可以zip
将两个数组放在一起以获得成对的元素,然后在它们上map
:
let result = zip(array1, array2).map { $0 - $1 }
请注意,使用此方法,如果一个数组比另一个数组具有更多的元素,则这些多余的元素将被忽略。