72

我想创建一个字符串到container/list.List实例的映射。这是正确的方法吗?

package main

import (
    "fmt"
    "container/list"
)

func main() {
    x := make(map[string]*list.List)

    x["key"] = list.New()
    x["key"].PushBack("value")

    fmt.Println(x["key"].Front().Value)
}
4

3 回答 3

166

每当我想使用 a 时List,我发现切片是正确的选择,例如

package main

import "fmt"

func main() {
    x := make(map[string][]string)

    x["key"] = append(x["key"], "value")
    x["key"] = append(x["key"], "value1")

    fmt.Println(x["key"][0])
    fmt.Println(x["key"][1])
}
于 2012-10-01T18:19:43.650 回答
35

我最喜欢的声明字符串映射到字符串切片的语法:

mapOfSlices := map[string][]string{
    "first": {},
    "second": []string{"one", "two", "three", "four", "five"},
    "third": []string{"quarter", "half"},
}
于 2017-12-27T22:18:32.137 回答
9

您所写的内容在技术上没有任何错误,但您应该定义自己的类型map[string]*list.List以避免一些陷阱,例如尝试.Front()在 nil 指针上调用方法。或者让它map[string]list.List避免这种情况。list.List 只是一对指针和一个长度值;在你的地图中使用 list.List 指针只是在空列表的情况下添加一个 nil 指针的额外情况。在任何一种情况下,您都应该为此用例定义一个新结构。

我倾向于这样写: http ://play.golang.org/p/yCTYdGVa5G

于 2012-10-01T19:49:01.180 回答