如何在 Swift 3 中转置不等数组长度的矩阵

Bel*_*lla 1 transpose padding multidimensional-array swift3

我的数组是 [[Int]] 类型

array = [[1,2,3],
         [4,5,6],
         [7,8,9,10],
         [11,12,13],
         [14,15,16]]
Run Code Online (Sandbox Code Playgroud)

我希望转置结果为:

array = [[1,4,7,11,14],
         [2,5,8,12,15],
         [3,6,9,13,16],
         [0,0,10,0,0]]
Run Code Online (Sandbox Code Playgroud)

如何将 0 填充到没有相等行或列映射的数组。

我希望转置适用于具有不相等映射元素的行和列。请帮忙。

Rob*_*Rob 6

Here is an implementation that does what you want:

func transpose(_ input: [[Int]]) -> [[Int]] {
    let columns = input.count
    let rows = input.reduce(0) { max($0, $1.count) }

    var result: [[Int]] = []

    for row in 0 ..< rows {
        result.append([])
        for col in 0 ..< columns {
            if row < input[col].count {
                result[row].append(input[col][row])
            } else {
                result[row].append(0)
            }
        }
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)

Or, alternatively:

func transpose(_ input: [[Int]]) -> [[Int]] {
    let columns = input.count
    let rows = input.reduce(0) { max($0, $1.count) }

    return (0 ..< rows).reduce(into: []) { result, row in
        result.append((0 ..< columns).reduce(into: []) { result, column in
            result.append(row < input[column].count ? input[column][row] : 0)
        })
    }
}
Run Code Online (Sandbox Code Playgroud)