Dictionary 是否可以初始化映射';在创建新映射时,是否为s值?

Dictionary 是否可以初始化映射';在创建新映射时,是否为s值?,dictionary,go,Dictionary,Go,我正在使用一个从字节数组到二维列表的映射,其单独的列表元素是无符号32位整数。i、 e.map[[8]字节][]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-li

我正在使用一个从字节数组到二维列表的映射,其单独的列表元素是无符号32位整数。i、 e.
map[[8]字节][]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))

切片的默认值为
nil
,可以使用
append
。您可以这样做:

package main

import "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
将不起作用,因为您正在使用
my_map[x][0]
解除对
nil
的引用。因此,您必须明确检查
[0]
索引是否已分配。没有什么特别低效的,伊姆霍。它具有显式的优点,因此您可以确切地看到分配的位置

如果愿意,可以将此功能封装到函数中