有没有一种简单的方法来计算两个数组之间的差异

时间:2019-06-10 16:22:20

标签: arrays swift

我正在尝试计算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)

我想了解是否有一种有效的方法来实现这一目标。

2 个答案:

答案 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 }

请注意,使用此方法,如果一个数组比另一个数组具有更多的元素,则这些多余的元素将被忽略。