2012-10-01 14 views
30

Chciałbym utworzyć mapę instancji container/list.List. Czy to jest właściwy sposób, aby o tym zadbać?Tworzenie mapy Golanga 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) 
} 
+0

pewno, ale nie mogę pomóc, ale zastanawiam się, dlaczego trzeba coś takiego, chyba że robiłeś naprawdę niejednoznaczne przetwarzanie. – dskinner

+1

Gratulacje, twój kod po prostu [działa] (http://play.golang.org/p/EuYA92BtOR). – zzzz

+1

Oczywiście, ale czy jest to * właściwy * sposób na zrobienie tego? – Carson

Odpowiedz

58

Ilekroć chciałem użyć List Odkryłam, że kawałek był właściwy wybór, np

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

nic technicznie niepoprawne, co napisałeś, ale zalecana Zdefiniuj własny typ wokół map[string]*list.List, aby uniknąć pułapek, takich jak próba wywołania metody .Front() na zerowym wskaźniku. Lub uczynić go map[string]list.List, aby uniknąć tej sytuacji. Lista.lista to tylko para wskaźników i wartość długości; użycie wskaźnika list.List na mapie powoduje dodanie dodatkowego przypadku wskaźnika zerowego na wierzchu przypadku pustej listy. W obu przypadkach należy zdefiniować nową strukturę dla tego przypadku użycia.

byłbym skłonny napisać to tak: http://play.golang.org/p/yCTYdGVa5G

1

Mój ulubiony Składnia deklarowania mapę plasterki:

mapOfSlices := map[string][]string{ 
    "first": {}, 
    "second": []string{"one", "two", "three", "four", "five"}, 
    "third": []string{"quarter", "half"}, 
}