arrays - 多维数组 - 同时获取每个元素的值
问题描述
为此创建逻辑时遇到问题。甚至可能吗?
假设你有
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 循环是一个开始,但是在动态地同时访问每个元素时我被卡住了。这甚至可能吗?
解决方案
我没有直接针对二维数组工作,而是将它包装在一个结构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"]
推荐阅读
- azure - Azure 权限注册到 SQL 数据库连接失败
- python - Pytesseract 转换为错误的字符串
- intersystems-iris - 父子持久对象的清除策略
- java - 文件编码不稳定
- python - 如何从服务器上的所有内容中删除一个角色?
- database - 如何使用 API 从 opencellid 下载差异数据?
- java - JTable TableColumn - 拖动列时modelIndex的属性没有变化
- qt - QThread未定义对std函数的引用
- javascript - 访问 JSON 中的特定键?
- sql - Spanner 主键字符计数索引有多“深”?例如,如果前 2 个字符相同 +1,是否会有超级热点