我正在解决寻宝问题,并且想更改我的矢量数据值。那么,我该怎么做?
我尝试了很多事情,但对我没有任何帮助。我尝试了assoc,update,assoc-in,update-in等等。
(println (update-in data [row col] "+"))
(def data1 (-> data (assoc-in [0 0] \+)))
(println data1)
所以,我的载体就是这样
["---#--###----"
"---#---#-#---"
"-#-####---##-"
"-#------#----"
"-############"
"------------@"]
我想用-
来更改+
。
答案 0 :(得分:0)
字符串和向量在Clojure中是不可变的,因此您只能创建具有更新内容的对象的副本。
此外,您只能在Clojure的内置数据结构上调用assoc
或update
。您需要先将String转换为向量。更新后,可以通过在其上调用(apply str ...)
将其转换回字符串。
(defn to-plus [data x y]
(update data y (fn [row] (apply str (assoc (vec row) x \+)))))
答案 1 :(得分:0)
您将不得不优化数据结构,以便assoc-in
可以使用它。 assoc-in
和update-in
之类的函数在嵌套键值数据结构(例如地图和矢量)上运行。我建议像下面这样的摄取功能:
(defn create-maze [m]
(into [] (map vec) m))
这为您提供了向量的向量,其性质类似于二维数组。然后,您可以提供一个辅助功能,将迷宫打印到屏幕上:
(defn print-maze [m]
(doseq [line m]
(->> line (apply str) println)))
现在您有了从字符串表示形式来回移动的方法,现在可以在中间形式上使用assoc-in
来创建内容已更改的迷宫:
(->
(create-maze data)
(assoc-in [0 0] \+)
(assoc-in [3 4] \+)
print-maze)