erlang的list(一)

       之所以先从lists说起,因为大部分erlang的使用都离不开list,就连erlang中的string类型的数据其实也不过是一个list,erlang为什么对list那么情有独钟,作为一个并不深入这种语言的使用者我也说不好,不过我个人感觉,相比数组,list更方便于这种函数型语言对一个数据进行解析创建和修改,搭配于tuple(元组)也更利于一个数据的封装。

 

       加上对于list并没有设置大小,而是随数据的增长而增长,在处理数据的时候程序员也不需要刻意的去裁定内存的问题,做个小实验,我们写一个循环数据到erlang中List

-module(test).
-export([
	test_loop/0,
	test_loop/2
]).

test_loop() ->
	TestList = [],
	test_loop(TestList, 0).
test_loop(List, N) ->
	M = N + 1,
	NewTestList = List ++ [M],
	io:format("A Simple Test:~p~n", [M]),
	test_loop(NewTestList, M).

 上面的代码其实就是一个死循环,将数字从0开始递增加1作为一个元素加入到列表中(你可能要等好久才会出现内存溢出的问题)。

 

 list中你可以增加任意的数据类型于其中,目前我所经历过的项目中多是放入元组数据,例如这样一个数据

[
{100001,100001_512,1,{954,237}},
{100002,100001_513,1,{954,237}},
{100003,100001_514,1,{954,237}},
]

这样的数据像不像我们在处理Mysql或者其他数据库时的数据项呢,大多数的数据也都是这样的固定格式的,总之我们经常会以一个key为基准,让后放入相应Value,这样很方便我们去操作,我们既不需要关心Value的内容或者格式就可以通过一个key来将其取出进行操作

下面这种格式的数据,我们只需要知道第一个键就可以取出后面的数据。

 

[
{a,[{1,2,3}]},
{b,3},
{c,{1,2}}
]

 

erlang也提供了很强大的list处理方法,我们来看一下一些小例子比较常用的lists方法,当然你可以自己打印出结果,观察他们的返回值。

 

-module(test).
-export([
	using_list/0
]).

using_list() ->
	List1 = [],						%%创建一个空列表List1
	io:format("the List1 of test is :~p~n",[List1]),

	List2 = List1 ++ [{1, first}, {2, second}],		%%向数组中追加新的数据
	io:format("the List2 of test is :~p~n",[List2]),

	List3 = lists:keydelete(1,1, List2),			%%根据相应位置的key值来删除元素
	io:format("the List3 of test is :~p~n",[List3]),

	ListResult1 = lists:keyfind(1,1,List3),			%%根据相应位置的key值来查找元素
	io:format("the ListResult1 of test is :~p~n",[ListResult1]),

	ListResult2 = lists:keyfind(1,2,List3),			%%根据相应位置的key值来查找元素
	io:format("the ListResult2 of test is :~p~n",[ListResult2]),

	NewTuple = {1,first},
	List4 = lists:keyreplace(2, 1, List3, NewTuple),	%%根据相应位置来替换某个元素
	io:format("the List4 of test is :~p~n",[List4]).

lists的方法实现都是递归循环的,

所以尽量优化你的list格式,减少在程序中对于list的循环嵌套,

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值