這幾乎是我最後一個問題(Clojure idiomatic way to update multiple values of map)的後續,但不完全相同。 (請記住,我是相當新的Clojure的和一致好評函數式語言)Clojure:遍歷套圖
假設我有以下數據結構,定義爲地圖上套:
(def m1 {:1 #{2} :2 #{1 3} :3 #{1}})
和地圖的地圖這樣的:
(def m2 {:1 {:1 0 :2 12 :3 23} :2 {:1 23 :2 0 :3 4} :3 {:1 2 :2 4 :3 0}})
我想要做的就是更新在M1到一定值的對應關係m2
的登記。假設我想要的值是x
。得到的m2
會是這樣的:
{:1 {:1 0 :2 x :3 23} :2 {:1 x :2 0 :3 x} :3 {:1 x :2 4 :3 0}}
假設v
包含我的地圖每一個可能的密鑰,Y的第一次嘗試,(我悲慘地失敗了),就是做這樣的事情:(假設x=1
(for [i v]
reduce (fn [m j] (assoc-in m [i j] 1)) d (i m1)))
不用說,這是失敗的。那麼,如何做到這一點的習慣的方法?
如果OP只是使用數字作爲關鍵字開頭,而不是問題中的這些僞數字關鍵字,這會更容易。 – amalloy
您好,先生,太棒了。 只有一個問題:你能否進一步解釋一下這條線的工作原理: '(map(comp(partial vector k)keyword str)v))' 我的意思是,'comp'在這裏做什麼?我知道它構成了部分功能並將其轉換爲關鍵字,但是您能否進一步解釋一下? –
@amalloy如果我這樣做,它會更容易?我的意思是,這種情況下有一個簡單的解決方案嗎? –