2014-10-20 120 views

回答

4

使用get-inassoc-in

(defn swap-in [vv p1 p2] 
    (let [v1 (get-in vv p1) 
     v2 (get-in vv p2) 
    (-> vv 
     (assoc-in p1 v2) 
     (assoc-in p2 v1)))) 

所以现在:

(def my-vec [[1 2 3] [4 5 6] [7 8 9]]) 
(swap-in my-vec [0 2] [1 1]) 
=> [[1 2 5] [4 3 6] [7 8 9]] 

这将嵌套到任意 “深度” 载体工作,只要在我的 - 指定位置vec实际上存在。