当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Enum.slice用法及代码示例


Elixir语言中 Enum.slice 相关用法介绍如下。

用法一

slice(enumerable, index_range)
(从 1.6.0 开始)
@spec slice(t(), Range.t()) :: list()

通过 index_range 返回给定 enumerable 的子集列表。

index_range 必须是 Range 。给定一个 enumerable ,它会在 index_range.first (zero-base) 之前删除元素,然后在元素 index_range.last (包括)之前获取元素。

索引已标准化,这意味着将从末尾开始计算负索引(例如,-1 表示 enumerable 的最后一个元素)。

如果index_range.last 超出范围,则将其指定为最后一个元素的索引。

如果规范化的 index_range.first 超出给定的 enumerable 的范围,或者这个大于规范化的 index_range.last ,则返回 []

例子

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]

对于 start > stop 的范围,您需要将它们显式标记为增加:

iex> Enum.slice(1..30, 25..-1//1)
[26, 27, 28, 29, 30]

如果值超出范围,则返回一个空列表:

iex> Enum.slice(1..10, 11..20)
[]

# first is greater than last
iex> Enum.slice(1..10, 6..5)
[]

用法二

slice(enumerable, start_index, amount)
@spec slice(t(), index(), non_neg_integer()) :: list()

返回给定 enumerable 的子集列表,从 start_index(从零开始)和 amount 元素数量(如果可用)。

给定一个 enumerable ,它会在元素 start_index 之前删除元素;然后,它需要amount 个元素,如果没有足够的元素,则返回尽可能多的元素。

可以传递一个负数start_index,这意味着enumerable被枚举一次,索引从最后开始计数(例如,-1从最后一个元素开始切片)。

如果 amount0start_index 超出范围,则返回 []

例子

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)
[]

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Enum.slice(enumerable, index_range)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。