2016-04-16 15 views
0

Ich habe eine einfache Textdatei Inhalt enthält, wie dieseClojure lesen Datei auf 2D-Vektor

############ 
#P.........# 
#..........# 
#..........# 
#..........# 
#..........# 
############ 

Ich möchte in der Lage, diese Informationen in einem 2D-Vektor zu laden, so kann ich Index Fliesen mit ihren x/y-Koordinaten

habe ich versucht

(defn read-in-board [filepath] 
    (str/split-lines (slurp filepath))) 

Drucke das Ergebnis dann die folgenden Ausgänge

[############ #P.........# #..........# #..........# #..........# #..........# ############]  

Ich frage mich, wie ich die Zeichen in jedem String zu einzelnen Vektoren

d-Linie 1

[[#][#][#][#][#][#][#][#][#][#][#][#].... Line 2                    

Antwort

2

Ich sehe nicht, was mit der aktuellen Lösung falsch konvertieren könnte. Wenn ich eine temp.txt Datei mit dem Inhalt haben Sie in Ihrer Frage gab, kann ich es mit Ihrer read-in-board Funktion lesen und jedes Zeichen durch seine Koordinaten Zugriff mit get-in:

(let [board (read-in-board "temp.txt")] 
    (str (get-in board [1 1]))) 
;=> "P" 

Wenn Sie wirklich eine 2D-Vektor-Zeichen benötigen, obwohl, können Sie wie folgt erhalten:

(mapv vec (read-in-board "temp.txt")) 
;=> [[\# \# \# \# \# \# \# \# \# \# \# \#] 
; [\# \P \. \. \. \. \. \. \. \. \. \#] 
; [\# \. \. \. \. \. \. \. \. \. \. \#] 
; [\# \. \. \. \. \. \. \. \. \. \. \#] 
; [\# \. \. \. \. \. \. \. \. \. \. \#] 
; [\# \. \. \. \. \. \. \. \. \. \. \#] 
; [\# \# \# \# \# \# \# \# \# \# \# \#]] 

Da ein String ist eine Folge, vec wandelt eine Zeichenkette in einen Vektor von Zeichen. Daher können Sie mapv verwenden, um diese Funktion auf jedes Element der Karte anzuwenden und als Ergebnis einen Vektor zurück zu erhalten.

Dies würde Ihnen ermöglichen, assoc-in und update-in zu verwenden, wie Piotrek Bzdyl wies darauf hin.

+0

Ich wusste nicht, die Get-In-Funktion! Vielen Dank –

+0

Extra Frage: Wissen Sie, ob es dann möglich ist, Werte im Board zu aktualisieren? –

+1

Werfen Sie einen Blick auf 'update-in' und' assoc-in'. –