首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新clojure中特定索引处的2D向量值?

如何更新clojure中特定索引处的2D向量值?
EN

Stack Overflow用户
提问于 2019-05-28 11:21:59
回答 2查看 406关注 0票数 1

我正在解决一个寻找宝藏的问题,我想改变我的向量数据值。那么,我该怎么做呢?

我试了那么多东西,但都不管用。我尝试了assoc,update,assoc-in,update-in和all。

代码语言:javascript
复制
(println (update-in data [row col] "+"))

(def data1 (-> data (assoc-in [0 0] \+)))

(println data1)

所以,我的向量是这样的

代码语言:javascript
复制
["---#--###----" 
 "---#---#-#---" 
 "-#-####---##-" 
 "-#------#----" 
 "-############" 
 "------------@"]

我想用+改变-

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-29 04:29:34

您将不得不改进您的数据结构,以便assoc-in能够使用它。像assoc-inupdate-in这样的函数对嵌套的键值数据结构进行操作,比如映射和向量。我建议使用如下摄取函数:

代码语言:javascript
复制
(defn create-maze [m]
  (into [] (map vec) m))

这为您提供了一个向量的向量,本质上类似于一个二维数组。然后,您可以提供一个辅助函数来将迷宫打印到屏幕:

代码语言:javascript
复制
(defn print-maze [m]
  (doseq [line m]
    (->> line (apply str) println)))

现在,您已经有了一种从字符串表示形式来回转换的方法,现在可以在中间表单上使用assoc-in来创建内容已更改的迷宫:

代码语言:javascript
复制
(->
  (create-maze data)
  (assoc-in [0 0] \+)
  (assoc-in [3 4] \+)
  print-maze)
票数 0
EN

Stack Overflow用户

发布于 2019-05-28 15:41:50

字符串和向量在Clojure中是不可变的,因此您只能使用更新的内容创建对象的副本。

此外,您只能在Clojure的内置数据结构上调用assocupdate。您需要首先将字符串转换为向量。更新后,您可以通过对其调用(apply str ...)将其转换回字符串。

代码语言:javascript
复制
(defn to-plus [data x y]
  (update data y (fn [row] (apply str (assoc (vec row) x \+)))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56334579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档