登录
首页 >  Golang >  Go问答

在创建新映射时是否能够初始化值?

来源:stackoverflow

时间:2024-02-29 08:54:24 275浏览 收藏

今天golang学习网给大家带来了《在创建新映射时是否能够初始化值?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我正在使用一个从字节数组到 2d 列表的映射,其单独的列表元素是无符号 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 是否有办法在创建新映射时自动使用内部列表填充地图的 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))

解决方案


切片的默认值为 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)
}

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

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

到这里,我们也就讲完了《在创建新映射时是否能够初始化值?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>