gpt4 book ai didi

go - 整数映射 -> Go 中的 2d slice

转载 作者:IT王子 更新时间:2023-10-29 02:30:25 25 4
gpt4 key购买 nike

我想要一个整数到不同维度 slice 的映射。

var SIZE_TO_PERM = make(map[int][][]uint32, 3)

var THREE_C_THREE = [...][3]int {
{0, 1, 2},
}

var FOUR_C_THREE = [...][3]int {
{0, 1, 2}, {0, 1, 3}, {0, 3, 2}, {3, 1, 2},
}

var FIVE_C_THREE = [...][3]int {
// ... etc
}

func init() {
SIZE_TO_PERM = map[int][][]uint32 {
3 : THREE_C_THREE,
4 : FOUR_C_THREE,
5 : FIVE_C_THREE,
}
}

但这行不通,因为 Go 会抛出错误:

# command-line-arguments
./test.go:96: cannot use THREE_C_THREE (type [1][5]int) as type [][]uint32 in map value
./test.go:97: cannot use FOUR_C_THREE (type [4][5]int) as type [][]uint32 in map value
./test.go:98: cannot use FIVE_C_THREE (type [20][5]int) as type [][]uint32 in map value

我该如何解决这个问题?也许我可以以某种方式让 Go 将一个 int 映射到一个指针/对 map 的引用?那么所有的类型都是一样的,我只需要按照地址把 map 拿到那里。问题是我不知道我会在那里找到哪种类型...

Go 的新手,所以任何提示表示赞赏。

最佳答案

首先, slice 数组是有区别的。

var a [3]int // Array of 3 ints
var s []int // Slice of ints

在您的情况下, map 可以存储 slice ,但数据存储在不同类型的数组中。

数组的大小是其类型的一部分。并且由于 Go 的严格类型,您不能将一种数组类型/大小的值设置为不同数组类型/大小的值。

相反,我们有 slice 。 slice 使用底层数组,但长度和容量可能不同。

您可以通过更改代码来解决您的问题:

var THREE_C_THREE = [][]uint32 { // Changed type from [1][3]int to [][]uint32
{0, 1, 2},
}

var FOUR_C_THREE = [][]uint32 { // Changed type from [4][3]int to [][]uint32
{0, 1, 2}, {0, 1, 3}, {0, 3, 2}, {3, 1, 2},
}

var FIVE_C_THREE = [][]uint32 { // Changed type from [5][3]int to [][]uint32
// ... etc
}

这篇官方博文将为您提供更多信息:http://blog.golang.org/slices
还有这篇文章:http://blog.golang.org/go-slices-usage-and-internals

关于go - 整数映射 -> Go 中的 2d slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21621547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com