我正在解决一个寻找宝藏的问题,我想改变我的向量数据值。那么,我该怎么做呢?
我试了那么多东西,但都不管用。我尝试了assoc,update,assoc-in,update-in和all。
(println (update-in data [row col] "+"))
(def data1 (-> data (assoc-in [0 0] \+)))
(println data1)所以,我的向量是这样的
["---#--###----"
"---#---#-#---"
"-#-####---##-"
"-#------#----"
"-############"
"------------@"]我想用+改变-。
发布于 2019-05-29 04:29:34
您将不得不改进您的数据结构,以便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)发布于 2019-05-28 15:41:50
字符串和向量在Clojure中是不可变的,因此您只能使用更新的内容创建对象的副本。
此外,您只能在Clojure的内置数据结构上调用assoc或update。您需要首先将字符串转换为向量。更新后,您可以通过对其调用(apply str ...)将其转换回字符串。
(defn to-plus [data x y]
(update data y (fn [row] (apply str (assoc (vec row) x \+)))))https://stackoverflow.com/questions/56334579
复制相似问题