查看源码 array (stdlib v6.2)

函数式,可扩展的数组。

数组可以具有固定大小,也可以根据需要自动增长。未显式设置的条目使用默认值。

数组使用基索引。这是一个刻意的设计选择,与其他 Erlang 数据结构(例如元组)不同。

除非用户在创建数组时指定,否则默认值为原子 undefined。未设置的条目和显式设置为与默认值相同的值的条目之间没有区别(比较 reset/2)。如果需要区分未设置和已设置的条目,请确保默认值不会与已设置条目的值混淆。

数组永远不会自动缩小。如果索引 I 已成功用于设置条目,则除非通过调用 resize/2 显式更改数组大小,否则范围 [0,I] 中的所有索引都保持可访问。

示例

创建一个固定大小的数组,其中条目 0-9 设置为 undefined

A0 = array:new(10).
10 = array:size(A0).

创建一个可扩展的数组并将条目 17 设置为 true,导致数组自动增长

A1 = array:set(17, true, array:new()).
18 = array:size(A1).

读回存储的值

true = array:get(17, A1).

访问未设置的条目将返回默认值

undefined = array:get(3, A1)

如果数组不具有固定大小,则访问超出最后一个已设置条目的条目也会返回默认值

undefined = array:get(18, A1).

“稀疏”函数会忽略默认值的条目

A2 = array:set(4, false, A1).
[{4, false}, {17, true}] = array:sparse_to_orddict(A2).

可扩展的数组稍后可以设置为固定大小

A3 = array:fix(A2).

固定大小的数组不会自动增长,并且不允许访问超出最后一个已设置条目的范围

{'EXIT',{badarg,_}} = (catch array:set(18, true, A3)).
{'EXIT',{badarg,_}} = (catch array:get(18, A3)).

概要

类型

函数式,可扩展的数组。该表示形式未记录,如有更改,恕不另行通知。请注意,数组不能直接比较是否相等。

函数

获取用于未初始化条目的值。

固定数组大小。这可以防止它在插入时自动增长。

使用指定的函数和初始累加器值折叠数组元素。元素按照从最低索引到最高索引的顺序访问。

使用指定的函数和初始累加器值从右到左折叠数组元素。元素按照从最高索引到最低索引的顺序访问。

将列表转换为可扩展数组。Default 用作数组中未初始化条目的值。

将成对的有序列表 {Index, Value} 转换为相应的可扩展数组。Default 用作数组中未初始化条目的值。

获取条目 I 的值。

如果 X 是数组,则返回 true,否则返回 false

检查数组是否具有固定大小。如果数组是固定的,则返回 true,否则返回 false

将指定的函数映射到每个数组元素。元素按照从最低索引到最高索引的顺序访问。

创建一个新的、初始大小为零的可扩展数组。

根据指定的选项创建新数组。默认情况下,该数组是可扩展的,并且初始大小为零。数组索引从 0 开始。

根据指定的大小和选项创建新数组。

使数组可调整大小。(反转 fix/1 的效果。)

将条目 I 重置为数组的默认值。如果条目 I 的值是默认值,则返回的数组不变。

将数组大小更改为 sparse_size/1 报告的大小。如果指定的数组具有固定大小,则结果数组也具有固定大小。

更改数组大小。

将数组的条目 I 设置为 Value

获取数组中条目的数量。条目从 0size(Array)-1 编号。因此,这也是保证以前未设置的第一个条目的索引。

使用指定的函数和初始累加器值折叠数组元素,跳过默认值的条目。元素按照从最低索引到最高索引的顺序访问。

使用指定的函数和初始累加器值从右到左折叠数组元素,跳过默认值的条目。元素按照从最高索引到最低索引的顺序访问。

将指定的函数映射到每个数组元素,跳过默认值的条目。元素按照从最低索引到最高索引的顺序访问。

获取数组中直到最后一个非默认值条目的条目数。也就是说,如果 I 是数组中最后一个非默认值条目,则返回 I+1;如果不存在此类条目,则返回零。

将数组转换为列表,跳过默认值的条目。

将数组转换为成对的有序列表 {Index, Value},跳过默认值的条目。

将数组转换为列表。

将数组转换为成对的有序列表 {Index, Value}

类型

-type array() :: array(term()).
-opaque array(Type)

函数式,可扩展的数组。该表示形式未记录,如有更改,恕不另行通知。请注意,数组不能直接比较是否相等。

链接到此类型

array_indx()

查看源码 (未导出)
-type array_indx() :: non_neg_integer().
链接到此类型

array_opt()

查看源码 (未导出)
-type array_opt() ::
          {fixed, boolean()} |
          fixed |
          {default, Type :: term()} |
          {size, N :: non_neg_integer()} |
          (N :: non_neg_integer()).
链接到此类型

array_opts()

查看源码 (未导出)
-type array_opts() :: array_opt() | [array_opt()].
链接到此类型

indx_pair(Type)

查看源码 (未导出)
-type indx_pair(Type) :: {Index :: array_indx(), Type}.
链接到此类型

indx_pairs(Type)

查看源码 (未导出)
-type indx_pairs(Type) :: [indx_pair(Type)].

函数

-spec default(Array :: array(Type)) -> Value :: Type.

获取用于未初始化条目的值。

另请参见 new/2

-spec fix(Array :: array(Type)) -> array(Type).

固定数组大小。这可以防止它在插入时自动增长。

另请参见 set/3relax/1

链接到此函数

foldl(Function, InitialAcc, Array)

查看源码
-spec foldl(Function, InitialAcc :: A, Array :: array(Type)) -> B
               when Function :: fun((Index :: array_indx(), Value :: Type, Acc :: A) -> B).

使用指定的函数和初始累加器值折叠数组元素。元素按照从最低索引到最高索引的顺序访问。

如果 Function 不是函数,则调用将失败并出现原因 badarg

另请参见 foldr/3map/2sparse_foldl/3

链接到此函数

foldr(Function, InitialAcc, Array)

查看源码
-spec foldr(Function, InitialAcc :: A, Array :: array(Type)) -> B
               when Function :: fun((Index :: array_indx(), Value :: Type, Acc :: A) -> B).

使用指定的函数和初始累加器值从右到左折叠数组元素。元素按照从最高索引到最低索引的顺序访问。

如果 Function 不是函数,则调用将失败并出现原因 badarg

另请参见 foldl/3map/2

-spec from_list(List :: [Value :: Type]) -> array(Type).

等效于 from_list(List, undefined)

链接到此函数

from_list(List, Default)

查看源码
-spec from_list(List :: [Value :: Type], Default :: term()) -> array(Type).

将列表转换为可扩展数组。Default 用作数组中未初始化条目的值。

如果 List 不是正确的列表,则调用将失败并出现原因 badarg

另请参见 new/2to_list/1

链接到此函数

from_orddict(Orddict)

查看源码
-spec from_orddict(Orddict :: indx_pairs(Value :: Type)) -> array(Type).

等效于 from_orddict(Orddict, undefined)

链接到此函数

from_orddict(Orddict, Default)

查看源码
-spec from_orddict(Orddict :: indx_pairs(Value :: Type), Default :: Type) -> array(Type).

将成对的有序列表 {Index, Value} 转换为相应的可扩展数组。Default 用作数组中未初始化条目的值。

如果 Orddict 不是正确的、有序的、第一个元素为非负整数的对列表,则调用将失败并出现原因 badarg

另请参见 new/2to_orddict/1

-spec get(I :: array_indx(), Array :: array(Type)) -> Value :: Type.

获取条目 I 的值。

如果 I 不是非负整数,或者如果数组具有固定大小且 I 大于最大索引,则调用将失败并出现原因 badarg

如果数组不具有固定大小,则返回任何大于 size(Array)-1 的索引 I 的默认值。

另请参见 set/3

-spec is_array(X :: term()) -> boolean().

如果 X 是数组,则返回 true,否则返回 false

请注意,该检查只是浅层的,因为即使此函数返回 true,也不能保证 X 是格式良好的数组表示形式。

-spec is_fix(Array :: array()) -> boolean().

检查数组是否具有固定大小。如果数组是固定的,则返回 true,否则返回 false

另请参见 fix/1

链接到此函数

map(Function, Array)

查看源码
-spec map(Function, Array :: array(Type1)) -> array(Type2)
             when Function :: fun((Index :: array_indx(), Type1) -> Type2).

将指定的函数映射到每个数组元素。元素按照从最低索引到最高索引的顺序访问。

如果 Function 不是函数,则调用将失败并出现原因 badarg

另请参见 foldl/3foldr/3sparse_map/2

-spec new() -> array().

创建一个新的、初始大小为零的可扩展数组。

另请参见 new/1new/2

-spec new(Options :: array_opts()) -> array().

根据指定的选项创建新数组。默认情况下,该数组是可扩展的,并且初始大小为零。数组索引从 0 开始。

Options 是一个单项或一个项列表,从以下选项中选择

  • N::integer() >= 0{size, N::integer() >= 0} - 指定初始数组大小;这也意味着 {fixed, true}。如果 N 不是非负整数,则调用会因 badarg 错误而失败。

  • fixed{fixed, true} - 创建一个固定大小的数组。另请参阅 fix/1

  • {fixed, false} - 创建一个可扩展(非固定大小)的数组。

  • {default, Value} - 将数组的默认值设置为 Value

选项按照它们在列表中出现的顺序进行处理,也就是说,后面的选项具有更高的优先级。

默认值用作未初始化条目的值,并且一旦创建数组就不能更改。

示例

array:new(100)

创建一个大小为 100 的固定大小数组。

array:new({default,0})

创建一个空的、可扩展的数组,其默认值为 0

array:new([{size,10},{fixed,false},{default,-1}])

创建一个初始大小为 10,默认值为 -1 的可扩展数组。

另请参阅 fix/1from_list/2get/2new/0new/2set/3

-spec new(Size :: non_neg_integer(), Options :: array_opts()) -> array().

根据指定的大小和选项创建新数组。

如果 Size 不是非负整数,则调用会因 badarg 错误而失败。默认情况下,数组具有固定大小。请注意,Options 中的任何大小规范都会覆盖参数 Size

如果 Options 是一个列表,则等效于 new([{size, Size} | Options]),否则等效于 new([{size, Size} | [Options]])。但是,直接使用此函数效率更高。

示例

array:new(100, {default,0})

创建一个大小为 100,默认值为 0 的固定大小数组。

另请参阅 new/1

-spec relax(Array :: array(Type)) -> array(Type).

使数组可调整大小。(反转 fix/1 的效果。)

另请参见 fix/1

-spec reset(I :: array_indx(), Array :: array(Type)) -> array(Type).

将条目 I 重置为数组的默认值。如果条目 I 的值是默认值,则返回的数组不变。

Reset 永远不会更改数组大小。可以通过调用 resize/2 显式地缩小数组。

如果 I 不是非负整数,或者如果数组具有固定大小且 I 大于最大索引,则调用会因 badarg 错误而失败;比较 set/3

另请参阅 new/2set/3

-spec resize(Array :: array(Type)) -> array(Type).

将数组大小更改为 sparse_size/1 报告的大小。如果指定的数组具有固定大小,则结果数组也具有固定大小。

另请参阅 resize/2sparse_size/1

-spec resize(Size :: non_neg_integer(), Array :: array(Type)) -> array(Type).

更改数组大小。

如果 Size 不是非负整数,则调用会因 badarg 错误而失败。如果指定的数组具有固定大小,则结果数组也具有固定大小。

链接到此函数

set(I, Value, Array)

查看源码
-spec set(I :: array_indx(), Value :: Type, Array :: array(Type)) -> array(Type).

将数组的条目 I 设置为 Value

如果 I 不是非负整数,或者如果数组具有固定大小且 I 大于最大索引,则调用将失败并出现原因 badarg

如果数组没有固定大小,且 I 大于 size(Array)-1,则数组会增长到大小 I+1

另请参阅 get/2reset/2

-spec size(Array :: array()) -> non_neg_integer().

获取数组中条目的数量。条目从 0size(Array)-1 编号。因此,这也是保证以前未设置的第一个条目的索引。

另请参阅 set/3sparse_size/1

链接到此函数

sparse_foldl(Function, InitialAcc, Array)

查看源码
-spec sparse_foldl(Function, InitialAcc :: A, Array :: array(Type)) -> B
                      when Function :: fun((Index :: array_indx(), Value :: Type, Acc :: A) -> B).

使用指定的函数和初始累加器值折叠数组元素,跳过默认值的条目。元素按照从最低索引到最高索引的顺序访问。

如果 Function 不是函数,则调用将失败并出现原因 badarg

另请参阅 foldl/3sparse_foldr/3

链接到此函数

sparse_foldr(Function, InitialAcc, Array)

查看源码
-spec sparse_foldr(Function, InitialAcc :: A, Array :: array(Type)) -> B
                      when Function :: fun((Index :: array_indx(), Value :: Type, Acc :: A) -> B).

使用指定的函数和初始累加器值从右到左折叠数组元素,跳过默认值的条目。元素按照从最高索引到最低索引的顺序访问。

如果 Function 不是函数,则调用将失败并出现原因 badarg

另请参阅 foldr/3sparse_foldl/3

链接到此函数

sparse_map(Function, Array)

查看源码
-spec sparse_map(Function, Array :: array(Type1)) -> array(Type2)
                    when Function :: fun((Index :: array_indx(), Type1) -> Type2).

将指定的函数映射到每个数组元素,跳过默认值的条目。元素按照从最低索引到最高索引的顺序访问。

如果 Function 不是函数,则调用将失败并出现原因 badarg

另请参阅 map/2

-spec sparse_size(Array :: array()) -> non_neg_integer().

获取数组中直到最后一个非默认值条目的条目数。也就是说,如果 I 是数组中最后一个非默认值条目,则返回 I+1;如果不存在此类条目,则返回零。

另请参阅 resize/1size/1

链接到此函数

sparse_to_list(Array)

查看源码
-spec sparse_to_list(Array :: array(Type)) -> [Value :: Type].

将数组转换为列表,跳过默认值的条目。

另请参阅 to_list/1

链接到此函数

sparse_to_orddict(Array)

查看源码
-spec sparse_to_orddict(Array :: array(Type)) -> indx_pairs(Value :: Type).

将数组转换为成对的有序列表 {Index, Value},跳过默认值的条目。

另请参阅 to_orddict/1

-spec to_list(Array :: array(Type)) -> [Value :: Type].

将数组转换为列表。

另请参阅 from_list/2sparse_to_list/1

-spec to_orddict(Array :: array(Type)) -> indx_pairs(Value :: Type).

将数组转换为成对的有序列表 {Index, Value}

另请参阅 from_orddict/2sparse_to_orddict/1