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

标签 dictionary go

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

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

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 是否有办法在创建新映射时使用内部列表自动填充 map 的 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))

最佳答案

slice 的默认值为nilappend 可以使用它。你可以这样做:

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)
}

但是,您的情况比较棘手,因为您的值是 slice 的 slice 。默认的 nil 在这种情况下不起作用,因为您要使用 my_map[x][0] 取消引用 nil。因此,您必须明确检查 [0] 索引是否已分配。恕我直言,没有什么特别低效的。它的优点是显式,因此您可以准确地看到事物分配的位置。

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

关于dictionary - 是否可以在创建新映射时初始化映射的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724467/

相关文章:

java - 如何在Java中将用户输入的字符与字典文件进行比较?

c# - 在一行 LINQ 语句中使用增量键列表到字典

ios - 如何在字典中显示数组 - Swift

go - 如何在 golang 的日期上加 1 秒?

amazon-web-services - 基于队列的处理

xml - 具有相同标签的 Golang XML 创建

java - 如何在java中分割字符串后将其部分存储在字典中

python - 将列表字典转换为元组字典

dictionary - 分配给 nil 映射中的条目

go - 理解 Go 中的接口(interface)