Last active
November 12, 2020 14:49
-
-
Save sebastibe/27be496c34ba6a3cce3b6425810a3dda to your computer and use it in GitHub Desktop.
Some helpers when moving elements around in Clojure vectors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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