Swift二维数组问题:如何用repeating设置365×24元素为0.0
关于Swift二维数组的问题解答
1. 初始声明的正确性
你的初始声明:
static var daysHoursArray = [[Double]]()
是正确的,它定义了一个静态的、元素类型为Double的二维空数组(数组的数组)。
2. 使用repeating初始化365×24的Double数组为0.0
你尝试的代码存在两个问题:
- 错误地使用了字符串字面量
"0.0",类型与Double不匹配,编译会报错; - 仅指定了外层数组的元素数量(365),但内层数组未初始化24个元素,最终会得到365个空的
[Double]数组,而非预期的365×24的二维数组。
正确的初始化代码应该是:
static var daysHoursArray = [[Double]](repeating: Array(repeating: 0.0, count: 24), count: 365)
这段代码的逻辑是:先创建一个包含24个0.0的一维Double数组,再将这个一维数组重复365次组成外层数组,最终得到365×24的二维数组,所有元素初始值都是0.0。
3. 更新指定单元格的代码正确性
你提供的更新代码存在语法错误:Swift的二维数组是数组的数组,不能使用逗号分隔的下标[days, hours]访问元素,正确的方式是使用双层下标[days][hours]。
修正后的代码:
let testDouble: Double = 1.0 for days in 0...364 { for hours in 0...23 { daysHoursArray[days][hours] = testDouble } }
注意:执行这段代码前,必须确保daysHoursArray已经完成初始化(即包含365个内层数组,每个内层数组有24个元素),否则会因数组越界导致运行时崩溃。
技术建议
- 边界检查:在访问二维数组元素前,建议添加边界判断,比如确认
days在0..<365范围内、hours在0..<24范围内,避免越界崩溃; - 固定大小替代方案:如果你的二维数组大小固定(365×24),可以考虑自定义一个
Array2D类型,封装下标访问逻辑,让代码更直观,同时避免内层数组长度不一致的问题; - 性能优化:如果需要频繁操作数组元素,可以使用
ContiguousArray替代普通Array,它在内存中是连续存储的,性能更优。
内容的提问来源于stack exchange,提问作者Edward Hasted
相关产品推荐
相关产品推荐

