首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组 | array

模块

排列

模块摘要

功能性的,可扩展的数组。

描述

功能性的,可扩展的数组。数组可以有固定的大小,也可以根据需要自动增长。默认值用于未显式设置的项。

数组使用-以索引为基础。这是一种精心设计的选择,与其他Erlang数据结构不同,例如元组。

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

数组永远不会自动收缩。 如果已经使用索引I成功设置条目,则范围为0的所有索引都保持可访问性,除非通过调用resize / 2明确更改了数组大小。

例子:

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

代码语言:javascript
复制
A0 = array:new(10).
10 = array:size(A0).

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

代码语言:javascript
复制
A1 = array:set(17, true, array:new()).
18 = array:size(A1).

读取存储的值:

代码语言:javascript
复制
true = array:get(17, A1).

访问未设置项将返回默认值:

代码语言:javascript
复制
undefined = array:get(3, A1)

如果数组没有固定大小,则访问上一组条目之后的条目也返回默认值:

代码语言:javascript
复制
undefined = array:get(18, A1).

“Sparse”函数忽略默认值条目:

代码语言:javascript
复制
A2 = array:set(4, false, A1).
[{4, false}, {17, true}] = array:sparse_to_orddict(A2).

一个可扩展的数组可以在以后生成固定大小的数组:

代码语言:javascript
复制
A3 = array:fix(A2).

固定大小的数组不会自动增长,并且不允许在最后一组条目之后进行访问:

代码语言:javascript
复制
{'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/3relax/1...

foldl(Function,InitialAcc :: A,Array : array:(Type)) - > B

类型

使用指定的函数和初始累加器值折叠数组元素。 这些元素按照从最低索引到最高索引的顺序访问。 如果函数不是函数,则调用失败,原因为badarg。

另见foldr/3map/2sparse_foldl/3

foldr(Function,InitialAcc :: A,Array : array:(Type)) - > B

类型

使用指定的函数和初始累加器值从右向左折叠阵列元素。元素从最高索引到最低索引被访问。如果Function不是功能,则呼叫失败并且有理由badarg

另见foldl/3map/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/2to_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/2to_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/3foldr/3sparse_map/2

new() - > array()

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

另见new/1new/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...

选项按它们在列表中出现的顺序处理,即后面的选项具有更高的优先级。

默认值用作未初始化项的值,并且在创建数组后不能更改。

例子:

代码语言:javascript
复制
array:new(100)

创建大小为100的固定大小数组.

代码语言:javascript
复制
array:new({default,0})

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

代码语言:javascript
复制
array:new([{size,10},{fixed,false},{default,-1}])

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

另见fix/1from_list/2get/2new/0new/2set/3

new(Size :: integer()> = 0,Options ::)array_opts()- >array()

根据指定的大小和选项创建一个新数组。如果Size不是非负整数,则该呼叫将失败且有原因badarg。默认情况下,数组的大小是固定的。请注意,Options覆盖参数中的任何尺寸规格Size

如果Options是一个列表,这相当于new([{size, Size} | Options],否则就等于new([{size, Size} | [Options]]然而,直接使用这一功能更有效。

例子:

代码语言:javascript
复制
array:new(100, {default,0})

创建大小为100的固定大小数组,其默认值是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/2set/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/2reset/2

size(Array ::)array()- > integer()> = 0

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

另见set/3sparse_size/1

sparse_foldl(Function,InitialAcc :: A,Array : array:(Type)) - > B

类型

使用指定的函数和初始累加器值折叠数组元素,跳过缺省值条目。元素按照从最低索引到最高索引的顺序访问。如果Function不是功能,则diaoy失败并且有理由badarg

另见foldl/3sparse_foldr/3

sparse_foldr(Function,InitialAcc :: A,Array : array:(Type)) - > B

类型

使用指定的函数和初始累加器值从右向左折叠数组元素,跳过默认值条目。元素从最高索引到最低索引被访问。如果Function不是功能,则调用失败并且有理由badarg

另见foldr/3sparse_foldl/3

sparse_map(Function,Array : array:(Type1)) - > array(Type2)

类型

将指定的函数映射到每个数组元素上,跳过缺省值条目。元素按照从最低索引到最高索引的顺序访问。如果Function不是功能,则呼叫失败并且有理由badarg

另见map/2...

sparse_size(Array ::)array()- > integer()> = 0

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

另见resize/1size/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/2sparse_to_list/1

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

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

另见from_orddict/2sparse_to_orddict/1

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com