如何在swift3中有效地将一维数组转换为二维数组

How efficiently to convert one dimensional array to two dimensional array in swift3

将像素值数组 [UInt8] 转换为二维像素值行数组的有效方法是什么 - [[UInt8]]

你可以这样写:

var pixels: [UInt8] = [0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15]
let bytesPerRow = 4
assert(pixels.count % bytesPerRow == 0)
let pixels2d: [[UInt8]] = stride(from: 0, to: pixels.count, by: bytesPerRow).map {
    Array(pixels[[=10=]..<[=10=]+bytesPerRow])
}

但是根据 Swift 数组的值语义,所有创建新嵌套数组的尝试都需要复制内容,因此可能 "efficient" 不足以满足您的目的。

重新考虑是否真的需要这样的嵌套数组。

这应该有效

private func convert1Dto2DArray(oneDArray:[String], stringsPerRow:Int)->[[String]]?{
       var target = oneDArray
       var outOfIndexArray:[String] = [String]()

       let reminder = oneDArray.count % stringsPerRow

       if reminder > 0 && reminder <= stringsPerRow{
           let suffix = oneDArray.suffix(reminder)
           let list = oneDArray.prefix(oneDArray.count - reminder)
           target = Array(list)
           outOfIndexArray = Array(suffix)
       }

       var array2D: [[String]] = stride(from: 0, to: target.count, by: stringsPerRow).map {
           Array(target[[=10=]..<[=10=]+stringsPerRow])}

       if !outOfIndexArray.isEmpty{
           array2D.append(outOfIndexArray)
       }

       return array2D
   }