猿问

是否可以在创建新映射时初始化映射的值?

我正在使用从字节数组到二维列表的映射,其单独的列表元素是无符号 32 位整数。IEmap[[8]byte][][]uint32


目前,我有逻辑检查是否填充了 2D 列表,如果没有,我添加两个空列表。从那里我可以开始实际填写这些列表。像这样:


my_map := make(map[[8]byte][][]uint32)

/* Some logic to define x and i */

if len(my_map[x]) == 0 {

    /* Create two fresh inner-lists */

}

my_map[x][0] = append(my_map[x][0], uint32(i))

然而,这并不是最优雅、也不是最有效的解决方案。我想知道 GO 是否有办法在创建新映射时使用内部列表自动填充地图的 2D 列表值。或者,如果有更好的数据类型可供使用,我会洗耳恭听。


本质上,这是我希望能够做的:


my_map := make(map[[8]byte][][]uint32)

/* Some logic to define x and i */

my_map[x][0] = append(my_map[x][0], uint32(i))


GCT1015
浏览 101回答 1
1回答

温温酱

切片的默认值为nil,append可以使用。你可以这样做:package mainimport "fmt"func main() {    m := make(map[string][]int)    m["test0"] = append(m["test0"], 10)    m["test1"] = append(m["test1"], 10)    m["test2"] = append(m["test2"], 10)    fmt.Println(m)}但是,您的情况比较棘手,因为您的值是切片的切片。在这种情况下,默认值nil不起作用,因为您正在取消引用nilwith my_map[x][0]。所以你必须明确检查[0]索引是否已经分配。恕我直言,没有什么特别低效的。它的优点是显式,因此您可以准确地看到事物分配的位置。如果您愿意,可以将此功能封装到一个函数中。
随时随地看视频慕课网APP

相关分类

Go
我要回答