数组 | array
排列
模块
排列
模块摘要
功能性的,可扩展的数组。
描述
功能性的,可扩展的数组。数组可以有固定的大小,也可以根据需要自动增长。默认值用于未显式设置的项。
数组使用零
-以索引为基础。这是一种精心设计的选择,与其他Erlang数据结构不同,例如元组。
除非用户在创建数组时指定,否则默认值是原子undefined
。未设置的条目与明确设置为默认值(比较reset/2
)的条目之间没有区别。如果您需要区分未设置和设置条目,请确保默认值不能与设置条目的值混淆。
数组永远不会自动收缩。 如果已经使用索引I成功设置条目,则范围为0的所有索引都保持可访问性,除非通过调用resize / 2明确更改了数组大小。
例子:
创建一个固定大小的数组,条目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).
“Sparse”函数忽略默认值条目:
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)).
数据类型
array(Type)
一个功能强大的可扩展的数组。申述没有记录在案,如有更改,恕不另行通知。注意,不能直接比较数组是否相等。
array() =
array
(term())
array_indx() = integer() >= 0
array_opts() =
array_opt()
| [
array_opt()
]
array_opt() =
{fixed, boolean()} |
fixed |
{default, Type :: term()} |
{size, N :: integer() >= 0} |
(N :: integer() >= 0)
indx_pairs(Type) = [
indx_pair
(Type)]
indx_pair(Type) = {Index ::
array_indx()
, Type}
输出
(Array : array:(Type)) - > Value :: Type
获取用于未初始化项的值。
另见new/2
...
fix(Array : array:(Type)) - > array(Type)
修正数组大小。这将阻止它在插入时自动增长。
另见set/3
和relax/1
...
foldl(Function,InitialAcc :: A,Array : array:(Type)) - > B
类型
使用指定的函数和初始累加器值折叠数组元素。 这些元素按照从最低索引到最高索引的顺序访问。 如果函数不是函数,则调用失败,原因为badarg。
另见foldr/3
,map/2
,sparse_foldl/3
。
foldr(Function,InitialAcc :: A,Array : array:(Type)) - > B
类型
使用指定的函数和初始累加器值从右向左折叠阵列元素。元素从最高索引到最低索引被访问。如果Function
不是功能,则呼叫失败并且有理由badarg
。
另见foldl/3
,map/2
。
from_list(List :: Value :: Type) - > array(Type)
相当于from_list(List, undefined)
...
from_list(List :: Value :: Type,Default :: term()) - >
array
(Type)
将列表转换为可扩展数组。Default
用作数组的未初始化条目的值。如果List
不是正确的列表,则调用失败并且有理由badarg
。
另见new/2
,to_list/1
。
from_orddict(Orddict : indx_pairs:(Value :: Type)) - > array(Type)
相当于from_orddict(Orddict, undefined)
...
from_orddict(Orddict : indx_pairs
:(Value :: Type),
Default :: Type) - >
array
(类型)
将有序列表对{Index, Value}
转换为相应的可扩展数组。Default
用作数组的未初始化条目的值。如果Orddict
不是第一个元素是非负整数的对的有序列表,则该调用将失败并且有理由badarg
。
另见new/2
,to_orddict/1
。
get(I :: array_indx(),Array : array:(Type)) - > Value :: Type
获取条目的值I
。如果I
不是非负整数,或者数组的大小固定并且I
大于最大索引,则调用将失败并返回原因badarg
。
如果数组没有固定大小,则返回I
大于任何索引的默认值size(Array)-1
。
另见set/3
...
is_array(X :: term()) - > boolean()
如果X是一个数组,则返回true,否则返回false。 请注意,检查只是浅显的,因为即使此函数返回true,也不能保证X是格式良好的数组表示形式。
is_fix(Array ::)array()- > boolean()
检查数组是否具有固定大小。 如果数组是固定的,则返回true,否则返回false。
另见fix/1
...
map(Function,Array : array:(Type1)) - > array(Type2)
类型
将指定的函数映射到每个数组元素上。元素按照从最低索引到最高索引的顺序访问。如果Function
不是功能,则调用失败并且有理由badarg
。
另见foldl/3
,foldr/3
,sparse_map/2
。
new() - > array()
创建一个初始大小为零的新的可扩展数组。
另见new/1
,new/2
。
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/1
,from_list/2
,get/2
,new/0
,new/2
,set/3
。
new(Size :: integer()> = 0,Options ::)array_opts()- >array()
根据指定的大小和选项创建一个新数组。如果Size
不是非负整数,则该呼叫将失败且有原因badarg
。默认情况下,数组的大小是固定的。请注意,Options
覆盖参数中的任何尺寸规格Size
。
如果Options
是一个列表,这相当于new([{size, Size} | Options]
,否则就等于new([{size, Size} | [Options]]
然而,直接使用这一功能更有效。
例子:
array:new(100, {default,0})
创建大小为10
0
的固定大小数组,其默认值是0
...
另见new/1
...
relax(Array : array:(Type)) - > array(Type)
使数组可调整大小。(扭转效果fix/1
。)
另见fix/1
...
重置(I :: array_indx(),Array : array:(Type)) - > array(Type)
将条目I重置为数组的默认值。 如果条目I的值是默认值,则数组将以原样返回。 重置从不改变阵列大小。 可以通过调用resize / 2来显式完成缩小。
如果 I 不是一个非负整数,或者如果数组的大小固定并且 I 大于最大索引,则调用失败,原因为badarg; 比较set / 3
另见new/2
,set/3
。
resize(Array : array:(Type)) - > array(Type)
将数组大小更改为由报告的大小sparse_size/1
。如果指定的数组具有固定大小,则结果数组的大小也是固定的。
另见resize/2
,,,sparse_size/1
...
resize(Size :: integer()> = 0,Array : array:(Type)) - >
array
(类型)
更改数组大小。如果Size
不是非负整数,则该呼叫将失败且有原因badarg
。如果指定的数组具有固定大小,则结果数组的大小也是固定的。
set(I :: array_indx(),Value :: Type,Array : array:(Type)) - >
array
(类型)
将数组的条目I设置为Value。 如果我不是一个非负整数,或者如果数组的大小固定,并且I大于最大索引,则调用会因为badarg而失败。
如果数组没有固定的大小,并且I
大于size(Array)-1
,则数组增长到大小I+1
。
另见get/2
,reset/2
。
size(Array ::)array()- > integer()> = 0
获取数组中的条目数。条目编号从0
到size(Array)-1
因此,这也是第一项的索引,保证以前没有设置。
另见set/3
,sparse_size/1
。
sparse_foldl(Function,InitialAcc :: A,Array : array:(Type)) - > B
类型
使用指定的函数和初始累加器值折叠数组元素,跳过缺省值条目。元素按照从最低索引到最高索引的顺序访问。如果Function
不是功能,则diaoy失败并且有理由badarg
。
另见foldl/3
,sparse_foldr/3
。
sparse_foldr(Function,InitialAcc :: A,Array : array:(Type)) - > B
类型
使用指定的函数和初始累加器值从右向左折叠数组元素,跳过默认值条目。元素从最高索引到最低索引被访问。如果Function
不是功能,则调用失败并且有理由badarg
。
另见foldr/3
,sparse_foldl/3
。
sparse_map(Function,Array : array:(Type1)) - > array(Type2)
类型
将指定的函数映射到每个数组元素上,跳过缺省值条目。元素按照从最低索引到最高索引的顺序访问。如果Function
不是功能,则呼叫失败并且有理由badarg
。
另见map/2
...
sparse_size(Array ::)array()- > integer()> = 0
获取数组中的条目数,直到最后一个非默认值条目。 也就是说,如果I是数组中最后一个非默认值条目,则返回I + 1;如果不存在此类条目,则返回零。
另见resize/1
,size/1
。
sparse_to_list(Array : array:(Type)) - > Value :: Type
将数组转换为列表,跳过默认值条目。
另见to_list/1
。
sparse_to_orddict(Array : array:(Type)) - >
indx_pairs
(值类型)
将数组转换为一对的有序列表。{Index, Value}
跳过默认值项。
另见to_orddict/1
...
to_list(Array : array:(Type)) - > Value :: Type
将数组转换为列表。
另见from_list/2
,sparse_to_list/1
。
to_orddict(Array : array:(Type)) - > indx_pairs(Value :: Type)
将数组转换为一对的有序列表。{Index, Value}
...
另见from_orddict/2
,sparse_to_orddict/1
。