2012-10-01 28 views
30

container/list.List örneklerinin bir haritasını oluşturmak istiyorum. Bu konuda gitmek için doğru yolu bu mu?Bir Golang haritası oluştur

Ben bir dilim doğru seçim olduğunu tespit ettik bir List kullanmak istemişimdir her
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

emin ama yardım ama ihtiyaç duyduğu merak edemez gerçekten muğlak bir işlem yapmıyorsanız böyle bir şey – dskinner

+1

Tebrikler, kodunuz sadece [işler] (http://play.golang.org/p/EuYA92BtOR). – zzzz

+1

Elbette, ama bunu yapmanın doğru yolu nedir? – Carson

cevap

58

, örneğin

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

orada, yazdıklarınızın hakkında teknik olarak yanlış bir şey yok, ama yapmanız gerekir bir nil işaretçisinde .Front() yöntemini çağırmaya çalışmak gibi bazı tuzakları önlemek için kendi türünüzü map[string]*list.List çevirin. Ya da bu durumu önlemek için map[string]list.List yapın. Bir liste.List sadece bir çift işaretçi ve bir uzunluk değeridir; Haritanızda bir liste işaretçisi kullanmak sadece boş bir listenin üstündeki bir nil işaretçisinin ekstra durumunu ekler. Her iki durumda da, bu kullanım durumu için yeni bir yapı tanımlamanız gerekir.

böyle yazmaya meyilli olacaktır: http://play.golang.org/p/yCTYdGVa5G

1

Benim favori dilim bir harita bildiren sözdizimi:

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