Daniel Wu
Daniel Wu

Reputation: 6003

clojure: how to get several items by index out of vector

I am using the following code to extract data by index of [1 2], is there any shorter solution?

(vec (map #(nth ["a" "b" "c"] % ) [1 2]))

Upvotes: 7

Views: 1427

Answers (2)

Seth
Seth

Reputation: 10454

If you want ONLY the first and second index of a vector, there are many ways...

A simple sub vector can be used to persist the first index until the third index.

(subvec ["a" "b" "c"] 1 3)

You can map the vector and apply your vector to the first and second index to return the last two indices as a vector.

(mapv ["a" "b" "c"] [1 2])

Using the thread-last macro, you can take 3 indices and drop the first.

(->> ["a" "b" "c"] (take 3) (drop 1))

If you have a vector defined with n indices, and all you need is the last n indices, drop base 0 to return the last n.

(drop 1 ["a" "b" "c"])

Upvotes: 8

noisesmith
noisesmith

Reputation: 20194

mapv maps into a vector, and vectors when applied as functions do index lookup

(mapv ["a" "b" "c"] [1 2])

Upvotes: 9

Related Questions