Erlang 中lists的用法详解和例子说明,详细 全

本文详细介绍了Erlang中lists模块的各种函数,包括all, any, dropwhile, filter, map等,通过实例展示了如何使用这些函数处理列表,如过滤、映射、排序和合并等操作,帮助读者深入理解Erlang中列表的高级用法。" 128640308,14889585,Trivy:云原生环境的高效安全扫描工具,"['云原生安全', 'Trivy', '容器安全', '漏洞检测', '配置检查']
摘要由CSDN通过智能技术生成

-。- 收集的。官方doc也不尽详细呢。。


一,带函数Pred
1, all(Pred, List) -> boolean()
如果List中的每个元素作为Pred函数的参数执行,结果都返回true,那么all函数返回true,
否则返回false

例子:

lists:all(fun(E) -> true end,[1,2,3,4]).

结果

true


2, any(Pred, List) -> boolean()
如果List中至少有一个元素作为Pred函数的参数执行,结果返回true,那么any函数返回true,
否则返回false

例子

lists:any(fun(E) -> is_integer(E) end,[q,2,a,4]).

结果

true

 

3,dropwhile(Pred, List1) -> List2
将List1列表中的元素作为参数执行Pred函数,如果返回true,将其丢弃,最后返回剩余元素
组成的列表

例子

lists:dropwhile(fun(E) -> is_atom(E) end,[a,1,2,a,b]).

结果

[1,2,a,b]

4,filter(Pred, List1) -> List2
返回一个列表,这个列表是由List1中执行Pred函数返回true的元素组成。

lists:filter(fun(E) -> is_integer(E) end,[q,2,a,4]).

结果:

[2,4]

 

5,map(Fun, List1) -> List2
将List1中的每个元素去在Fun中执行,然后返回一个元素,最后返回的这些元素组成一个列表,
返回给List2
例子:
lists:map(fun(X)->[X,X] end, [a,b,c]).
结果:[[a,a],[b,b],[c,c]]

 

6,flatmap(Fun, List1) -> List2
这个函数和map比较类似,相当于执行了
lists:append(lists:map(List1)).
也就是把map的结果进行append处理
例子:
lists:flatmap(fun(X)->[X,X] end, [a,b,c]).
结果:[a,a,b,b,c,c]

 

7,foldl(Fun, Acc0, List) -> Acc1
Fun这个函数有两个参数
第一个参数是List中的元素,第二个参数是Fun函数执行完后的返回值,这个参数第一次执行时
就是Acc0
例子:对[1,2,3,4,5]求和
lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]).
结果:15
执行过程:首先,Fun第一次执行时,X的值取列表List的第一个元素1,Sum取0,
  Fun第二次执行时,X的值取列表List的第二个元素2,Sum取Fun第一次的返回值
  依次轮推,直到List中每个元素执行完,最后foldl返回最后一次的结果。

 

8,foldr(Fun, Acc0, List) -> Acc1
foldr这个函数和foldl比较相似
不过是Fun执行时,X的值先取List的最后一个,然后取倒数第二个。

 

9,foreach(Fun, List) -> ok
以List中的每个元素为参数执行Fun函数,执行顺序按照List中元素的顺序,这个函数最后返回ok。是单边的
例子 lists:foreach(fun(X)->
  %%using X to do somethings 
  %%
  end,List)

 

10,keymap(Fun, N, TupleList1) -> TupleList2
对TupleList1中的每个元素的第N项作为参数在Fun中处理,然后这个第N项最后就被替换为Fun执行完返回的值
例子:
List1 = [{name,"zhangjing"},{name,"zhangsan"}].
lists:keymap(fun(X)->
  list_to_atom(X)
  end,2,List1).
结果:
[{name,zhangjing},{name,zhangsan}]

 

11,mapfoldl(Fun, Acc0, List1) -> {List2, Acc1}
这个函数等于是把map和foldl函数结合起来。将List1中的每一个元素执行Fun函数,执行后花括号的第一个值作为返回值返回,
第二个值作为参数传给Fun,作为下一次用。
例子:
lists:mapfoldl(fun(X, Sum) -> {2*X, X+Sum} end,
0, [1,2,3,4,5]).
{[2,4,6,8,10],15}

 

12,mapfoldr(Fun, Acc0, List1) -> {List2, Acc1}
这个函数相当于将map和foldr结合起来


13,merge(Fun, List1, List2) -> List3
这个函数的功能也是把List1和List2合并到一起,只不过是List1和List2的元素要作为参数在Fun中执行,如果
Fun返回true,那么返回值就是List1在前,List2在后。否则,反之。
例子
lists:merge(fun(A,B)-> false end, [3,4],[2,1]).
结果
[2,1,3,4]

 

14,partition(Pred, List) -> {Satisfying, NotSatisfying}
这个函数的功能是将List分成两个List1和List2,List1是将List元素作为参数去Pred函数中执行返回true的元素组成,
List2由Pred返回false的元素组成。
注意,返回的是一个元组
例子
lists:partition(fun(A) -> A rem 2 == 1 end, [1,2,3,4,5,6,7]).
结果
{[1,3,5,7],[2,4,6]}


15,sort(Fun, List1) -> List2
如果Fun函数返回true,则排序是从小到大的顺序,否则,从大到小。
其中Fun有两个参数。
例子
lists:sort(fun(A,B)-> false end,[1,2,3]).
结果
[3,2,1]


16,splitwith(Pred, List) -> {List1, List2}
将List分成List1和List2,
List1由List中元素在Pred函数返回true的组成,但是有一点,如果遇到为false的,则将剩下的元素
全部放到List2中,List1中就只有前面为true的。
例子
lists:splitwith(fun(A) -> is_atom(A) end, [a,b,1,c,d,2,3,4,e]).
结果
{[a,b],[1,c,d,2,3,4,e]}


17,takewhile(Pred, List1) -> List2
List1中的元素element依次执行Pred(element),如果返回true,则获取这个元素,直到有元素执行Pred(element)返回false
例子
lists:takewhile(fun(E)-> is_atom(E) end,[a,b,1,e,{c},[d]])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值