首页 > 解决方案 > 展平 simd_float4x4 矩阵的优雅方法

问题描述

我想将一个simd_float4x4或一个simd_float3x3矩阵展平为一个浮点元素数组。

对于我会使用的常规数组

let arr = [[1,2,3],[4,5,6],[7,8,9]]
print(arr.flatMap { $0 })

我怎样才能优雅地为 a simd_float4x4or结构做到这一点?simd_float3x3

我目前正在使用这个,

extension simd_float3x3 {
    var array: [Float] {
        return [columns.0.x, columns.0.y, columns.0.z,
                columns.1.x, columns.1.y, columns.1.z,
                columns.2.x, columns.2.y, columns.2.z]
    }
}

let arr = simd_float3x3.init()
print(arr.array.compactMap({$0}))

标签: arraysswiftsimd

解决方案


优雅在旁观者的眼中。到目前为止,我想出了这个:

let s = simd_float3x3(simd_float3(1, 2, 3), simd_float3(4, 5, 6), simd_float3(7, 8, 9)) 

let y = (0..<3).flatMap { x in (0..<3).map { y in s[x][y] } }

print(y)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

推荐阅读