Swift中如何获取多维数组的尺寸?求Matlab size等效实现
嗨~作为Swift新手碰到这个问题太正常啦!毕竟Swift里的“多维数组”和Matlab里的矩阵本质不太一样,咱们一步步来解决:
首先得明白:Swift中的[[Int]]其实是数组的数组,外层数组的每个元素都是一个子数组(也就是你的“行”)。所以a.count返回的是外层数组的元素个数,也就是你说的行数2,完全没问题。
那列数怎么拿呢?如果你的矩阵是规则的(每一行的元素个数都一样),直接取第一个子数组的count就可以啦,不过要注意处理数组为空的情况,避免可选值报错:
var a = [[1,2,3],[3,4,5]] let rows = a.count // 用?? 0处理数组为空或者第一个子数组为空的情况 let columns = a.first?.count ?? 0 print("\(rows) \(columns)") // 输出:2 3
如果你想像Matlab那样用一个size()方法直接获取,完全可以自己给数组写个扩展,这样用起来更方便:
// 给元素是Collection类型的数组扩展size方法 extension Array where Element: Collection { func size() -> (rows: Int, columns: Int) { let rows = self.count let columns = self.first?.count ?? 0 return (rows, columns) } } // 使用起来就像Matlab一样简洁啦 var a = [[1,2,3],[3,4,5]] let matrixSize = a.size() print("\(matrixSize.rows) \(matrixSize.columns)") // 输出:2 3
⚠️ 小提醒:如果你的“多维数组”是不规则的(比如有的行元素多有的行少),这个方法只会取第一行的列数,这时候你可能需要额外处理这种情况,但如果是规则矩阵的话,这个实现完全够用~
内容的提问来源于stack exchange,提问作者Harry B
相关产品推荐
相关产品推荐

