@@ -344,9 +344,10 @@ function first(itr)
344
344
end
345
345
346
346
"""
347
- first(v::AbstractVector , n::Integer)
347
+ first(itr , n::Integer)
348
348
349
- Get the first `n` elements of vector `v`, or fewer elements if `v` is not long enough.
349
+ Get the first `n` elements of the iterable collection `itr`, or fewer elements if `v` is not
350
+ long enough.
350
351
351
352
# Examples
352
353
```jldoctest
@@ -362,7 +363,12 @@ julia> first(Bool[], 1)
362
363
0-element Array{Bool,1}
363
364
```
364
365
"""
365
- first (v:: AbstractVector , n:: Integer ) = @inbounds v[begin : min (begin + n - 1 , end )]
366
+ first (itr, n:: Integer ) = collect (Iterators. take (itr, n))
367
+ # Faster method for vectors
368
+ function first (v:: AbstractVector , n:: Integer )
369
+ n < 0 && throw (ArgumentError (" Number of elements must be nonnegative" ))
370
+ @inbounds v[begin : min (begin + n - 1 , end )]
371
+ end
366
372
367
373
"""
368
374
last(coll)
@@ -383,9 +389,10 @@ julia> last([1; 2; 3; 4])
383
389
last (a) = a[end ]
384
390
385
391
"""
386
- last(v::AbstractVector , n::Integer)
392
+ last(itr , n::Integer)
387
393
388
- Get the last `n` elements of vector `v`, or fewer elements if `v` is not long enough.
394
+ Get the last `n` elements of the iterable collection `itr`, or fewer elements if `v` is not
395
+ long enough.
389
396
390
397
# Examples
391
398
```jldoctest
@@ -401,7 +408,12 @@ julia> last(Float64[], 1)
401
408
0-element Array{Float64,1}
402
409
```
403
410
"""
404
- last (v:: AbstractArray , n:: Integer ) = @inbounds v[max (begin , end - n + 1 ): end ]
411
+ last (itr, n:: Integer ) = reverse! (collect (Iterators. take (Iterators. reverse (itr), n)))
412
+ # Faster method for arrays
413
+ function last (v:: AbstractArray , n:: Integer )
414
+ n < 0 && throw (ArgumentError (" Number of elements must be nonnegative" ))
415
+ @inbounds v[max (begin , end - n + 1 ): end ]
416
+ end
405
417
406
418
"""
407
419
strides(A)
0 commit comments