我正在使用从字节数组到二维列表的映射,其单独的列表元素是无符号 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))
1 回答
温温酱
TA贡献1752条经验 获得超4个赞
切片的默认值为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不起作用,因为您正在取消引用nilwith my_map[x][0]。所以你必须明确检查[0]索引是否已经分配。恕我直言,没有什么特别低效的。它的优点是显式,因此您可以准确地看到事物分配的位置。
如果您愿意,可以将此功能封装到一个函数中。
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消