2016-12-13 11 views
-2

Ich habe eine Zeichenfolge, die aus einer Textdatei stammt. Ich konnte es über bekommen ‚io/ioutil‘ den folgenden Text enthält:String in Array in Golang konvertieren

"[[0, 1], [0, 2], [0,3 ]]" 

Wie konvertiere ich diese Zeichenfolge in ein Array, das ich in einer for-Schleife verwenden kann?

+5

Mögliche Duplikat [Parsing explizite Arrays] (http://stackoverflow.com/questions/40333562/parsing-explicit-arrays/40333763#40333763). – icza

+0

Danke, ich bin neu in Go, also habe ich kein explizites Verständnis darüber, wie man Dinge umwandelt. – gentlyawesome

+1

Betrachten Sie die [Tour of Go] (https://tour.golang.org/), die ziemlich schnell durch die meisten Sprachen geht, einschließlich der Grundlagen wie mit Arrays und Strings arbeiten. – nothingmuch

Antwort

1

Go ist eine streng typisierte Sprache, daher gibt es keine eval-Anweisung, die Daten direkt in Code umwandelt. In diesem Fall, zu dem Sie gefragt haben, dass Ihre Liste von Listen in einem Format ist, das mit dem JSON-Format kompatibel ist, dachte ich daran, das JSON-Paket zu verwenden, um das Parsing durchzuführen. Es sind also nur drei Codezeilen erforderlich, die den Typ der erwarteten Daten definieren, den Decoder aus der Zeichenfolge erstellen und den Decoder auf den Datentyp anwenden. Die Tatsache, dass Go streng typisiert ist, aber Reflektion unterstützt (was Sie in diesem Code nicht sehen werden), hat mich etwas gewöhnungsbedürftig gemacht. Reflektion macht die dritte Zeile möglich und warum die erste Zeile die Variable als eine Liste von Listen definiert ([] [] int).

package main 

import (
    "encoding/json" 
    "fmt" 
    "strings" 
) 

// Prints: 
// <nil> [[0 1] [0 2] [0 3]] 
// 0 0 0 
// 0 1 1 
// 1 0 0 
// 1 1 2 
// 2 0 0 
// 2 1 3 

func main() { 
    jsonstring := "[[0, 1], [0, 2], [0,3 ]]" 
    var listoflists [][]int 
    dec := json.NewDecoder(strings.NewReader(jsonstring)) 
    err := dec.Decode(&listoflists) 
    fmt.Println(err, listoflists) 
    for i, list := range listoflists { 
     for j, value := range list { 
      fmt.Println(i, j, value) 
     } 
    } 
} 
+0

Der Link von icza zu einer ähnlichen Frage hat eine viel gründlichere Antwort, die mehr Details über das json-Paket gibt. Vielleicht sehen Sie das als eine einfache Grundierung an. Ich werde hier auch erwähnen, dass es Fragen darüber gegeben hat, wie man einen String analysiert, wenn er nicht im JSON-Format war und manchmal das einfachste Go-Programm zum Schreiben eines Parsers für den String, aus dem gerade ein neuer String erstellt wurde es war im JSON-Format und ließ dann das JSON-Paket das schwere Heben durchführen. – WeakPointer