# The most elegant way to remove certain numbers from a vector?

Assume I have this vector:

amounts [
15679
245672
345671
445676
541677
544673
546676
648672
749679
941679
]

Assume I want to remove the numbers under 544673. Can anyone suggest what would be elegant? I realize I can do a loop or a reduce but I assume there might be something more elegant?

Use `filterv`.

Thatâ€™s great. This does what I need:

(filterv #(> % 10022) amounts)

Works really well. I used this:

``````(filterv #(not= 3 %) [1 2 4 3 3 5 3 6])
;; [1 2 4 5 6]
``````

If they are sorted in ascending order

``````(->> amounts (take-while #(< % 544673)) vec)

;;or, slightly more efficient using transducer + transient behind the scene

(into [] (take-while #(< % 544673)) amounts)
``````

There are even more efficient ways, depending on performance considerations. You could binary search for the index of the last entry < 5446773, then use `subvec` to derive a vector slice in o(1) time. So derive a â€śnewâ€ť vector in O (log(n)) (original would still be referenced transitively thoughâ€¦).

2 Likes