檢視原始碼 array (stdlib v6.2)

功能性、可擴展的陣列。

陣列可以有固定大小,或者可以根據需要自動增長。對於未明確設定的條目,會使用預設值。

陣列使用基底索引。這是一個經過深思熟慮的設計選擇,與其他 Erlang 資料結構(例如,元組)不同。

除非使用者在建立陣列時指定,否則預設值為原子 undefined。未設定的條目與明確設定為與預設值相同的值的條目之間沒有差異(比較 reset/2)。如果您需要區分未設定和已設定的條目,請確保預設值不會與已設定條目的值混淆。

陣列永遠不會自動縮小。如果索引 I 已成功用於設定條目,則範圍 [0,I] 中的所有索引都保持可存取,除非陣列大小透過呼叫 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).

「稀疏」函式會忽略預設值的條目

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().
-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

-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

-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 的原因而失敗。如果指定的陣列具有固定大小,則產生的陣列也具有固定大小。

-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

-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