我遇到了一个问题,需要成对地遍历数组。最好的方法是什么?或者,作为替代方案,将Array转换为成对的Array(然后可以正常迭代)的最佳方法是什么?
这是我得到的最好的。它必须output是var,而且不是很漂亮。有没有更好的办法?
output
var
let input = [1, 2, 3, 4, 5, 6] var output = [(Int, Int)]() for i in stride(from: 0, to: input.count - 1, by: 2) { output.append((input[i], input[i+1])) } print(output) // [(1, 2), (3, 4), (5, 6)] // let desiredOutput = [(1, 2), (3, 4), (5, 6)] // print(desiredOutput)
您可以 映射 跨步而不是对其进行迭代,从而可以将结果作为 常量获取:
let input = [1, 2, 3, 4, 5, 6] let output = stride(from: 0, to: input.count - 1, by: 2).map { (input[$0], input[$0+1]) } print(output) // [(1, 2), (3, 4), (5, 6)]
如果只需要遍历对,并且给定的数组很大,那么避免创建带有延迟映射的中间数组可能是有利的:
for (left, right) in stride(from: 0, to: input.count - 1, by: 2) .lazy .map( { (input[$0], input[$0+1]) } ) { print(left, right) }