标签: clojure
如何扩展此功能: What is the idiomatic way to swap two elements in a vector
本质上是一个2D数组?
[[1 2 3] [4 5 6] [7 8 9]] --> [[1 2 5] [4 3 6] [7 8 9]]
答案 0 :(得分:4)
使用get-in和assoc-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]]
这将适用于嵌套到任何“深度”的向量,只要my-vec中的指定位置实际存在。