如何从Double数组创建元组数组?

时间:2019-02-19 10:09:13

标签: swift

我一直在努力寻找合适的方法来实现这一目标。

我确定可以用一行代码完成。

我有这个:[Double]

我想将其转换为:[(Double, Double)]

Tuples的数组必须这样创建(从Double数组中获取):

(在索引0处为Double,在索引1处为Double),(在索引1处为Double,在索引2处为Double)...

我尝试使用mapzip方法。

但是我似乎无法在代码中编写用于构建元组的(i, i+1), (i+1, i+2)逻辑。

let tupleArray = doubleArray.map { ($0, $1) }

2 个答案:

答案 0 :(得分:5)

let doubles: [Double] = [0, 1, 2, 3, 4]
let tuples = zip(doubles.dropLast(), doubles.dropFirst()).map { ($0, $1) }

结果:

[(0, 1), (1, 2), (2, 3), (3, 4)]

@编辑

正如评论中指出的,您可以使用更短的形式:

Array(zip(doubles, doubles.dropFirst()))

我不考虑跳过.dropLast(),只是为了使代码更明显。

答案 1 :(得分:2)

您可以从没有上一个索引的数组创建索引数组,然后就可以从该索引和下一个索引的元素创建元组

let tupleArray = doubleArray.indices.dropLast().map { (doubleArray[$0], doubleArray[$0+1]) }
[(0.1, 0.2), (0.2, 0.3), (0.3, 0.4)]