我有一个包含这样内容的简单文本文件
############
#P.........#
#..........#
#..........#
#..........#
#..........#
############
我希望能够将此信息加载到2D矢量中,因此我可以使用x / y坐标索引切片
我试过
(defn read-in-board [filepath]
(str/split-lines (slurp filepath)))
打印结果然后输出以下内容
[############ #P.........# #..........# #..........# #..........# #..........# ############]
我想知道如何将每个字符串中的字符转换为单个矢量
即。第1行
[[#][#][#][#][#][#][#][#][#][#][#][#].... Line 2
答案 0 :(得分:4)
我不知道您当前的解决方案有什么问题。如果我的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
将该函数应用于电路板的每个元素,并返回一个矢量。
这将允许您使用assoc-in
和update-in
,正如Piotrek Bzdyl指出的那样。