You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Double二维数组转为String二维数组时遇索引越界错误,如何修复?

问题修复:Double二维数组转String二维数组的索引越界错误

错误原因

你的代码崩溃是因为初始化的result数组结构与原数组不匹配,直接通过索引赋值不存在的元素导致索引越界:

  • 初始result = [[]]只包含一个空的子数组,当原数组的子数组数量大于1时,访问result[i](i≥1)会直接越界;
  • 即使处理第一个子数组(i=0),result[0]是空数组,访问result[0][j](j≥0)也会因为空数组没有对应索引的元素而崩溃;
  • Swift数组不允许直接通过索引赋值未初始化的位置,必须先确保对应位置有元素,或者通过append方式添加元素。

修复方案

方案1:手动遍历构建数组(基础写法)

通过遍历原数组的每个子数组,逐个转换元素并构建新的子数组,再添加到结果数组中:

var arrayOfDouble: [[Double]] = [[1.1, 2.2], [3.3, 4.4]]

func change(_ doubles: [[Double]]) -> [[String]]{
    var result: [[String]] = []
    
    // 遍历原数组的每个子数组
    for subDoubles in doubles {
        var stringSubArray: [String] = []
        // 遍历子数组中的每个Double元素,转换为String
        for num in subDoubles {
            stringSubArray.append(String(num))
        }
        // 将转换后的子数组添加到结果数组
        result.append(stringSubArray)
    }

    return result
}

var lll:[[String]] = change(arrayOfDouble)
print(lll) // 输出:[["1.1", "2.2"], ["3.3", "4.4"]]

方案2:使用高阶函数map简化代码(Swift风格写法)

利用Swift的map高阶函数可以更简洁地完成转换,无需手动管理数组的初始化和索引:

var arrayOfDouble: [[Double]] = [[1.1, 2.2], [3.3, 4.4]]

func change(_ doubles: [[Double]]) -> [[String]]{
    // 外层map处理每个子数组,内层map处理子数组中的每个元素
    return doubles.map { subArray in
        subArray.map { String($0) }
    }
}

// 进一步简化的单行版本:
// func change(_ doubles: [[Double]]) -> [[String]] { doubles.map { $0.map(String.init) } }

var lll:[[String]] = change(arrayOfDouble)
print(lll)

内容的提问来源于stack exchange,提问作者Rizky Pratama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:20:18