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

时间:2016-09-09 22:10:52

标签: multidimensional-array swift3

将pixelValues [UInt8]数组转换为pixelValues行的二维数组的有效方法是什么?[[UInt8]]

2 个答案:

答案 0 :(得分:1)

你可以这样写:

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[$0..<$0+bytesPerRow])
}

但是使用Swift Arrays的值语义,所有创建新嵌套数组的尝试都需要复制内容,因此可能不会有效#34;足够你的目的。

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

答案 1 :(得分:0)

这应该有效

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[$0..<$0+stringsPerRow])}

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

       return array2D
   }