2012-10-01 18 views
30

Vorrei creare una mappa delle istanze container/list.List. È questo il modo corretto per farlo?Creazione di una mappa Golang degli elenchi

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

certo, ma non posso fare a meno di chiedersi perché si avrebbe bisogno una cosa del genere a meno che tu non stia eseguendo un'elaborazione davvero ambigua – dskinner

+1

Congratulazioni, il tuo codice semplicemente [funziona] (http://play.golang.org/p/EuYA92BtOR). – zzzz

+1

Certo, ma è il modo * giusto * per farlo? – Carson

risposta

58

Ogni volta che ho voluto usare un List ho trovato che una fetta è stata la scelta giusta, per esempio

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

non c'è niente di tecnicamente corretta su quello che hai scritto, ma si dovrebbe definire il proprio tipo attorno a map[string]*list.List per evitare alcune insidie, come provare a chiamare il metodo .Front() su un puntatore nullo. O rendi un map[string]list.List per evitare quella situazione. Un elenco.Lista è solo una coppia di puntatori e un valore di lunghezza; usando un list.List puntatore nella mappa aggiunge solo il caso in più di un puntatore nullo in cima al caso di una lista vuota. In entrambe le situazioni, dovresti definire una nuova struttura per questo caso d'uso.

sarei propenso a scrivere in questo modo: http://play.golang.org/p/yCTYdGVa5G

1

la mia sintassi preferito per dichiarare una mappa di fette:

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