Note that subvec as currently implemented does not return a first
class vector; it prevents the original vector from being garbage
collected, because it delegates all basic operations to it, and it
does not support some less-basic operations (you cannot make a
transient out of a subvec-created vector). It is the fastest possible
way of obtaining a view on a fragment of a vector, though.
Also note that vectors support rseq ("seq in reverse" produced in
constant time), so you could always
(reverse (take n (rseq v)))
Cheers,
Michał
On 4 July 2012 21:01, Jay Fields <[email protected]> wrote:
> I think subvec is likely what you're looking for, but I also wanted to
> mention take-last for the sake of completeness.
>
> On Wed, Jul 4, 2012 at 2:16 PM, Tassilo Horn <[email protected]> wrote:
>> John Holland <[email protected]> writes:
>>
>> Hi John,
>>
>>> If I want to get the last n elements of a list or vector I am doing
>>> the following:
>>>
>>> (reverse (take n (reverse thelist)))
>>>
>>> Is there a better way to do this?
>>
>> For vectors, you can do that much more efficiently using subvec:
>>
>> (subvec my-vec (- (count vec) n))
>>
>> For all sequential collections (lists, vectors, and sequences), I think
>> this should be better:
>>
>> (drop (- (count my-seq) n) my-seq)
>>
>> That's because lists, vectors, seqs (with the exception of lazy seqs)
>> usually implement the Counted abstraction meaning that (count coll) is a
>> constant time operation.
>>
>> Bye,
>> Tassilo
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]
>> Note that posts from new members are moderated - please be patient with your
>> first post.
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en