Enum.slice
slice
, go back to Enum module for more information.
Specs
Returns a subset list of the given enumerable
by index_range
.
index_range
must be a Range
. Given an enumerable
, it drops
elements before index_range.first
(zero-base), then it takes elements
until element index_range.last
(inclusively).
Indexes are normalized, meaning that negative indexes will be counted
from the end (for example, -1
means the last element of the enumerable
).
If index_range.last
is out of bounds, then it is assigned as the index
of the last element.
If the normalized index_range.first
is out of bounds of the given
enumerable
, or this one is greater than the normalized index_range.last
,
then []
is returned.
Examples
iex> Enum.slice(1..100, 5..10)
[6, 7, 8, 9, 10, 11]
iex> Enum.slice(1..10, 5..20)
[6, 7, 8, 9, 10]
# last five elements (negative indexes)
iex> Enum.slice(1..30, -5..-1)
[26, 27, 28, 29, 30]
For ranges where start > stop
, you need to explicit
mark them as increasing:
iex> Enum.slice(1..30, 25..-1//1)
[26, 27, 28, 29, 30]
If values are out of bounds, it returns an empty list:
iex> Enum.slice(1..10, 11..20)
[]
# first is greater than last
iex> Enum.slice(1..10, 6..5)
[]
Specs
slice(t(), index(), non_neg_integer()) :: list()
Returns a subset list of the given enumerable
, from start_index
(zero-based)
with amount
number of elements if available.
Given an enumerable
, it drops elements right before element start_index
;
then, it takes amount
of elements, returning as many elements as possible if
there are not enough elements.
A negative start_index
can be passed, which means the enumerable
is
enumerated once and the index is counted from the end (for example,
-1
starts slicing from the last element).
It returns []
if amount
is 0
or if start_index
is out of bounds.
Examples
iex> Enum.slice(1..100, 5, 10)
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
# amount to take is greater than the number of elements
iex> Enum.slice(1..10, 5, 100)
[6, 7, 8, 9, 10]
iex> Enum.slice(1..10, 5, 0)
[]
# using a negative start index
iex> Enum.slice(1..10, -6, 3)
[5, 6, 7]
# out of bound start index (positive)
iex> Enum.slice(1..10, 10, 5)
[]
# out of bound start index (negative)
iex> Enum.slice(1..10, -11, 5)
[]