2016-09-09 35 views
0

什麼是pixelValues [UInt8]數組轉換成pixelValues行的二維陣列的有效途徑 - [[UInt8]]如何高效地一個維數組轉換爲二維數組中swift3

+0

您想要將數組追加到多維數組[[UInt8]]中,還是將原始數組[UInt8]拆分爲代表行的較小數組?如果是這樣,分裂它的規則是什麼? – xhamr

+0

@xhamr我想從Image的pixelxValues [UInt8]數組中創建一個二維數組,其中每個元素都是pixelRValues [UInt8]中的pixelRow(即[UInt8])(來自Image的pixelxValues [UInt8]數組)。 – VYT

回答

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數組的值語義,所有嘗試創建新的嵌套數組需要複製內容,因此可能不足以滿足您的目的。

重新考慮你是否真的需要這樣的嵌套數組。

+0

我有一個pixelValues [UInt8]的數組,並嘗試使用地圖進行轉換,最後使用[ArraySlice ]而不是[[UInt8]]。使用ArraySlice 有意義嗎? – VYT

+0

'ArraySlice'也是一個值類型,但是它的寫入時複製功能在某些情況下會節省一些複製成本,在其他一些情況下也是如此。取決於你如何使用「2D陣列」。 – OOPer

+0

@VYT,我需要注意'ArraySlice'的索引並不總是以0開始。這可能不是你想要的。 – OOPer

相關問題