我正在尝试从多维数组创建多维切片,并且发生了一些奇怪的事情(至少对我而言)。我创建了一个多维数组并从中ma制作了三个切片s1, s2, 。s3下面的代码显示了这一点:
package main
import (
"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。如何?
我希望我已经解释了我不清楚的地方。
ITMISS
怎么定义二维数组和多维数组?
多维数组的长度?
js里面有多维数组吗
定义一个一维数组转二维数组的方法
相关分类