首页 > 解决方案 > 多维数组 - 同时获取每个元素的值

问题描述

为此创建逻辑时遇到问题。甚至可能吗?

假设你有

Var one = [[1,1,1]]
Var two = [[2,2,2]]
Var three = [[3,3,3]]

Var k = [one,two,three]

假设您不知道 var “k” 的长度。

我正在尝试编写一个函数,允许我同时访问“k”中的所有元素并访问每个索引值。

例子。

k[0][0]
k[1][0]
k[2][0]
——————
k[0][1]
k[1][1]
k[2][1]
——————

我知道 for 循环是一个开始,但是在动态地同时访问每个元素时我被卡住了。这甚至可能吗?

标签: arraysswiftsortingmultidimensional-array

解决方案


我没有直接针对二维数组工作,而是将它包装在一个结构Matrix中,函数column(at:)将返回列中的所有值。该结构是通用的,以允许不同的元素类型

struct Matrix<T> {
    private var data: [[T]]

    private init() {
        data = []
    }

    init(rows: [T]...) {
        self.init()
        let check = rows.first?.count ?? 0
        for row in rows {
            guard row.count == check else { fatalError("All rows must be the same length")}
            data.append(row)
        }
    }

    func row(at index: Int) -> [T]? {
        guard index < data.count else { return nil }

        return data[index]
    }

    func column(at index: Int) -> [T]? {
        guard !data.isEmpty else { return nil }

        var column = [T]()

        for i in 0..<data.count {
            column.append(data[i][index])
        }

        return column
    }
}

而且可以这样使用

let matrix = Matrix(rows: [1,1,2],[2,2,2],[3,3,3])
print(matrix.column(at: 1))
print(matrix.row(at: 1))

let matrix2 = Matrix(rows: ["a", "b"], ["c", "d"], ["e", "f"],["g", "h"])
print(matrix2.column(at: 1))
print(matrix2.row(at: 1))

[1, 2, 3]
[2, 2, 2]
["b", "d", "f", "h"]
["c", "d"]


推荐阅读