Erlang数据结构篇 -- array

array

array的实质是一个记录,可动态扩展大小,初始的索引为0(注意其他数据类型索引初始值为1)


-record(array, {size :: non_neg_integer(),	%% number of defined entries
		max  :: non_neg_integer(),	%% maximum number of entries
						%% in current tree
		default,	%% the default value (usually 'undefined')
                elements :: elements(_)         %% the tuple tree
	       }).

方法调用示例:

1)array:new/0,array:new/1,array:new/2 : 
%当使用new方法时,若是指定了size,则创建的array为fix-size类型,若是没有指定default值,则默认为undefined值.弱均为默认值,则最后的element值直接显示有多少个默认值.
1> A=array:new().
{array,0,10,undefined,10}  
2> A1=array:new(10).
{array,10,0,undefined,10}
3> A2=array:new(10,{default,-1}).
{array,10,0,-1,10}
4> 

2)array:fix/1 , array:relax/1 :
%使用fix可将自动扩展类型转变为固定大小类型,relax则是相反
1>array:fix(A).
{array,0,0,undefined,10}
2>array:relax(A1).
{array,10,10,undefined,10}

3)array:default/1 :
%可以获取array的default值
1>array:default(A2).
-1

4)from_list/1 , from/list/2 :
%将list转变为array类型
1> A=array:from_list([1,2,3,4,5,6]).
{array,6,10,undefined,
       {1,2,3,4,5,6,undefined,undefined,undefined,undefined}}
2> B=array:from_list([1,2,3,4,5,6],-1).
{array,6,10,-1,{1,2,3,4,5,6,-1,-1,-1,-1}}

5)from_orddict/1 , from_orddict/2 :
%将orddict转变为array类型
1> array:from_orddict([{1,2},{3,4}]).
{array,4,10,undefined,
       {undefined,2,undefined,4,undefined,undefined,undefined,
                  undefined,undefined,undefined}}
2>array:from_orddict([{1,2},{3,4}],-1).
{array,4,10,-1,{-1,2,-1,4,-1,-1,-1,-1,-1,-1}}

6)foldl/3 , foldl/3 :
%可以对array从左或是从右开始,对数据进行操作.注意的是Function需要满足定义的形式
1> A=array:from_list([1,2,3,4,5,6]).
{array,6,10,undefined,
       {1,2,3,4,5,6,undefined,undefined,undefined,undefined}}
2>Function= (fun(Index,Value,Acc) -> [Value+Value|Acc] end).
3> array:foldl(Function,[],A).     
[12,10,8,6,4,2]
4> array:foldr(Function,[],A).
[2,4,6,8,10,12]

7)get/2 :
%获得对应index的值
1>array:get(2,A).
3

8)is_array/1
%判断是否为array
1>array:is_array(A).
true

9)is_fix/1
%判断是否为固定长度的array
1>A=array:new(10).
{array,10,0,undefined,10}
2>array:is_fix(A).
true
3>B=array:relax(A).
{array,10,10,undefined,10}
4>array:is_fix(B).
false

10)map/2 :
%与foldl,foldr相似,均是逐一遍历
1>Function=(fun(Index,Value) -> Value*Value end).
2)array:map(Function,A).
{array,6,10,undefined,
       {1,4,9,16,25,36,undefined,undefined,undefined,undefined}}

11)reset/2 :
%重置对应index位置的值,该值为默认值
1>array:reset(2,A).
{array,6,10,undefined,
       {1,2,undefined,4,5,6,undefined,undefined,undefined,
        undefined}}

12)resize/1 resize/2
%重置大小
1>array:resize(5,A).
{array,5,10,undefined,
       {1,2,3,4,5,6,undefined,undefined,undefined,undefined}}

13)set/3
%设置对应位置的值
1>array:set(8,8,A).
{array,9,10,undefined,
       {1,2,3,4,5,6,undefined,undefined,8,undefined}}

14)size/1
%获得array的大小值
1>array:size(A).
6

15)to_list/1 , to_orddict/1
%转换成list或是orddict
1>array:to_list(A).
[1,2,3,4,5,6]
2>array:to_orddict(A).
[{0,1},{1,2},{2,3},{3,4},{4,5},{5,6}]

16)sparse_foldl/3 , sparse_foldr/3 , sparse_map/2 , sparse_size/1 , sparse_to_list/1
sparse_to_orddict/1
%以上方法主要的特点是可以略过默认值
1>B=array:set(8,8,A).
{array,9,10,undefined,
       {1,2,3,4,5,6,undefined,undefined,8,undefined}}
2>array:to_list(B).
[1,2,3,4,5,6,undefined,undefined,8]
3>array:sparse_to_list(B).
[1,2,3,4,5,6,8]







猜你喜欢

转载自blog.csdn.net/qq_34755443/article/details/84984586