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

Swift中修改三维矩阵单个元素值致全量变更的解决方案咨询

解决Swift中三维类矩阵修改单个元素导致所有元素变化的问题

这个问题我之前也碰到过,核心原因是Swift里类是引用类型,而你用repeating初始化数组的方式,其实是把同一个B实例的引用重复填充到了数组的所有位置。也就是说,整个三维矩阵里的所有“元素”,本质上都指向内存里同一个B(b: -1)对象,所以你修改任何一个位置的b属性,其实都是在修改这个唯一的实例,自然所有位置看起来都变成7了。

解决办法:确保每个数组位置都是独立的B实例

不要用repeating直接复用同一个引用,而是用嵌套的map来逐个创建新的B对象,这样每个位置的元素都是独立的实例:

// 方式1:结合repeating和内层map,兼顾简洁性
var k: [[[B]]] = Array(repeating: Array(repeating: (0..<2).map { _ in B(b: -1) }, count: 4), count: 3)

// 方式2:更直观的多层map,清晰体现三维结构
var k: [[[B]]] = (0..<3).map { _ in
    (0..<4).map { _ in
        (0..<2).map { _ in
            B(b: -1)
        }
    }
}

现在你再执行k[0][1][1].b = 7,就只会修改这个特定位置的b值,其他元素的b还是保持-1不变。

额外说明

如果你的B是结构体(值类型),那原来用repeating的方式是完全没问题的——因为结构体在赋值时会做值复制,每个数组位置都是独立的副本。但因为你用的是类(引用类型),必须手动确保每个元素都是新创建的实例,避免引用复用的问题。

内容的提问来源于stack exchange,提问作者Tuan Huynh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:11:55