我一直在努力寻找合适的方法来实现这一目标。
我确定可以用一行代码完成。
我有这个:[Double]
我想将其转换为:[(Double, Double)]
Tuples
的数组必须这样创建(从Double数组中获取):
(在索引0处为Double,在索引1处为Double),(在索引1处为Double,在索引2处为Double)...
我尝试使用map
或zip
方法。
但是我似乎无法在代码中编写用于构建元组的(i, i+1), (i+1, i+2)
逻辑。
let tupleArray = doubleArray.map { ($0, $1) }
答案 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)]