2016-04-16 1 views
0

にファイルを読み込むので、私はでき彼らのxとインデックスタイル/ yが、私は、次Clojureのは、私は2Dベクターにこの情報を読み込むことができるようにしたい、この</p> <pre><code>############ #P.........# #..........# #..........# #..........# #..........# ############ </code></pre> <p>のような内容を含む単純なテキストファイルを持っている2Dベクトル

を出力結果を印刷する

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

を試してみた

を座標

私は、個々のベクトルに各文字列内の文字を変換する可能性がどのように思ったんだけど

すなわちライン1

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

答えて

2

私はあなたの現在のソリューションと間違って何が表示されません。私は、あなたの質問に与えた内容でtemp.txtファイルがある場合、私はあなたのread-in-board機能を使用してそれを読み、get-inを使用して、その座標で任意の文字にアクセスすることができます。

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

あなたが本当に文字の2Dベクトルが必要な場合は、しかし、あなたはこのようなものを得ることができます。

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

文字列はシーケンスであるので、vecは、文字のベクトルに文字列を変換します。したがって、mapvを使用して、ボードのすべての要素にその関数を適用し、その結果としてベクトルを返すことができます。

これは、Piotrek Bzdylが指摘しているように、assoc-inupdate-inを使用できるようになります。

+0

私はゲットイン機能を知らなかった! –

+0

余分な質問:ボード内の値を更新できるかどうか知っていますか? –

+1

'update-in'と' assoc-in'を見てください。 –

関連する問題

 関連する問題