首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变存储在原子化地图中的向量的惯用方法是什么?

改变存储在原子化地图中的向量的惯用方法是什么?
EN

Stack Overflow用户
提问于 2016-01-18 01:19:49
回答 4查看 66关注 0票数 2

我有一个叫app-state的原子,它保存着一张地图。看起来是这样的:

代码语言:javascript
复制
{:skills [{:id 1 :text "hi"} {:id 2 :text "yeah"}]}

:id = 2删除向量中元素的惯用方法是什么?其结果将是:

代码语言:javascript
复制
{:skills [{:id 1 :text "hi"}]}

..。到目前为止,我有这样的想法:

代码语言:javascript
复制
(defn new-list [id]
   (remove #(= id (:id %)) (get @app-state :skills)))

swap! app-state assoc :skills (new-list 2)

很管用,但我觉得这不太对。我想可能是这样的:

代码语言:javascript
复制
swap! app-state update-in [:skills] remove #(= id (:id %))

但这似乎行不通。

任何帮助都是非常感谢的!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-18 04:22:17

代码语言:javascript
复制
(swap! state update :skills (partial remove (comp #{2} :id)))
票数 1
EN

Stack Overflow用户

发布于 2016-01-18 03:53:22

试试这个:

代码语言:javascript
复制
(defn new-list [app-state-map id]
      (assoc app-state-map :skills (into [] (remove #(= id (:id %)) (:skills app-state-map)))))

(swap! app-state new-list 2)

swap!将把原子的当前值传递给提供它的函数。没有必要自己取消它在函数中的作用。

有关更多细节,请参见文档 on swap!

票数 2
EN

Stack Overflow用户

发布于 2016-01-18 02:02:59

代码语言:javascript
复制
(def skills {:skills [{:id 1 :text "hi"} {:id 2 :text "yeah"}]})

(defn remove-skill [id]
  (update skills :skills (fn [sks] (vec (remove #(= id (:id %)) sks)))))

然后,您将能够调用如(remove-skill 1),并看到只剩下另一个(使用:ID2的技能)。

我更喜欢你的方式。这将需要被用来对付一个原子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34845894

复制
相关文章

相似问题

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