Skip to content

Instantly share code, notes, and snippets.

@sebastibe
Last active November 12, 2020 14:49
Show Gist options
  • Save sebastibe/27be496c34ba6a3cce3b6425810a3dda to your computer and use it in GitHub Desktop.
Save sebastibe/27be496c34ba6a3cce3b6425810a3dda to your computer and use it in GitHub Desktop.
Some helpers when moving elements around in Clojure vectors
(defn vec-remove
"Remove elem in coll by index."
[coll pos]
(vec (concat (subvec coll 0 pos) (subvec coll (inc pos)))))
(defn vec-add
"Add elem in coll by index."
[coll pos el]
(concat (subvec coll 0 pos) [el] (subvec coll pos)))
(defn vec-move
"Move elem in coll by index"
[coll pos1 pos2]
(let [el (nth coll pos1)]
(if (= pos1 pos2)
coll
(into [] (vec-add (vec-remove coll pos1) pos2 el)))))
(defn vec-swap
"Swap position of 2 elem in a vector by index."
[v pos1 pos2]
(assoc v pos2 (v pos1) pos1 (v pos2)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment