如何在Vector向量中交换2个元素

时间:2014-10-20 08:33:10

标签: 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]]

1 个答案:

答案 0 :(得分: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]]

这将适用于嵌套到任何“深度”的向量,只要my-vec中的指定位置实际存在。