为了账号安全,请及时绑定邮箱和手机立即绑定

从多维数组制作多维切片无法按预期工作

从多维数组制作多维切片无法按预期工作

Go
慕妹3242003 2023-03-15 14:47:05
我正在尝试从多维数组创建多维切片,并且发生了一些奇怪的事情(至少对我而言)。我创建了一个多维数组并从中ma制作了三个切片s1, s2, 。s3下面的代码显示了这一点:package mainimport (    "fmt")func main() {    var ma [4][3]int32 = [4][3]int32{        {10, 20, 30},        {50, 60, 70},        {80, 90, 100},        {110, 120, 130},    }    var s1 [][3]int32 = ma[:]       // expected    var s2 [][3]int32 = ma[:][:]    // ????    var s3 [][]int32 = ma[0:2][0:2] // ????}var s1 [][3]int32 = ma[:]行为符合预期。ma[:]创建一个 [3]int32 数组的切片,因此我们有一个底层数组,其中每个元素都是 [3]int32 数组类型。完全符合我的预期行为。定义 s1 和 s2 时会出现问题。它的行为不像我预期的那样。var s2 [][3]int32 = ma[:][:]给出与 相同的结果var s1 [][3]int32 = ma[:]。我希望它能制作一片切片,而不是一片数组。这怎么可能?两者怎么会给出相同的结果呢?此外,我var s3 [][]int32 = ma[0:2][0:2]还希望创建一片切片。相反,它给出了错误“不能在变量声明编译器中使用 ma[0:2][0:2]([][3]int32 类型的值)作为 [][]int32 值”。所以不知何故,ma[0:2][0:2]它给出了类型[][3]int32,而不是[][]int32。如何?我希望我已经解释了我不清楚的地方。
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

表达式ma[:][:]解析为(ma[:])[:]. 该表达式的计算结果为一个切片表达式,该切片表达式基于 上的切片表达式的结果ma。外部切片表达式是一个 noop。

Go 没有多维切片表达式。


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信