`
做一行爱一行吧
  • 浏览: 23519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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的循环嵌套,

 

 

 

分享到:
评论

相关推荐

    Erlang list用法

    Erlang是一种并发、分布式、面向进程的编程语言,广泛用于构建高可用性和容错性的系统。在Erlang中,列表是一种基本的数据结构,提供了丰富的操作函数。以下是对标题和描述中提到的Erlang列表函数的详细解释: 1. `...

    Erlang开发环境搭建

    Erlang是一种功能强大且灵活的编程语言,广泛应用于 telecommunications、金融、电子商务等领域。然而,要充分发挥Erlang的潜力,需要搭建合适的开发环境。本文将指导读者如何在Windows平台下搭建Erlang开发环境,...

    erlang lib of iconv

    - `iconv_list()`:返回一个列表,包含所有Erlang iconv库支持的字符编码。 4. **使用示例** 假设我们有一个UTF-8编码的字符串,需要转换为GBK编码,可以这样操作: ```erlang {Descriptor, _} = iconv:open(...

    erlang 入门练习

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和容错系统。本教程将带你入门Erlang,通过实践来学习其基本概念和语法。 在Erlang中,程序是由一系列的进程...

    inside Erlang VM3

    - **高效数据结构**:Erlang内置了几种高效的数据类型如原子(Atom)、二进制(Binary)、列表(List)和元组(Tuple)。 - **垃圾收集**:ERTS采用了标记-清除算法,并支持分代垃圾回收策略。 - **软实时系统**:ERTS支持软...

    Efficiency Guide (erlang)

    列表推导是Erlang中非常强大的特性之一,它们不仅提高了代码的可读性和简洁性,而且通常比手动迭代更有效率。列表推导会自动进行优化,比如提前终止循环以避免不必要的计算。 ##### 1.2.3 误区:尾递归函数比普通...

    erlang r17官方api及stdlib手册

    Erlang是一种面向并发的、函数式编程语言,主要用于构建分布式、容错性强的系统。R17是Erlang的一个版本,它包含了对先前版本的改进和新特性。本手册是Erlang R17的官方API及stdlib文档,为开发者提供了详尽的函数...

    KMP(Erlang)代码实现

    Erlang是一种面向并发的编程语言,它采用轻量级进程以及消息传递模型,非常适合于编写并发和分布式系统。Erlang的函数式编程特性以及对模式匹配的支持,为实现KMP算法提供了便利。 在给定的文件内容中,通过Erlang...

    erlang环境搭建

    Erlang是一种开源的编程语言,主要设计用于构建高并发、分布式、容错性强的系统。本文将详细介绍如何在Windows和Linux操作系统上搭建Erlang的开发环境。 ### Windows中环境搭建 在Windows上,Erlang的安装相对简单...

    for_each_file 用erlang代码实现遍历文件

    在Erlang编程语言中,`for_each_file`是一个自定义函数,用于遍历指定目录下的所有文件,并对每个文件执行特定的操作。在这个场景中,它读取每个文件的内容,以行为单位处理每一行,将每一行作为一个列表元素,最后...

    java php python erlang 千万级内存数据性能比较

    在提供的文件"erlang_list_dict_test.erl"和"erlang_list_dict_test - pro_dict-check_duplicate.erl"中,可以看到Erlang对列表和字典(dict)操作的性能测试。Erlang的字典数据结构通常比其他语言的哈希表更快,...

    Erlang程序设计中文版(完整书签).pdf

    8. 语法和基本概念:Erlang有独特的语法,包括模块(module)、函数(function)、元组(tuple)、列表(list)、记录(record)等数据类型和构造。掌握基本语法是使用Erlang进行开发的基础。 由于文件描述中提到...

    erlang api 最新资源

    同时,Erlang提供了两种复合数据结构:元组(tuple)和列表(list)。这些数据类型构成了Erlang程序的基础,所有的数据操作都围绕这些类型展开。 2. 模式匹配 模式匹配是Erlang中一个非常重要的特性,它是函数式...

    erlang程序设计第二版课后习题答案(精简版).zip

    3. **列表处理(List Comprehensions)**:Erlang提供了强大的列表处理工具,可以用于生成新列表或对列表进行操作。习题可能考察如何使用列表解析进行数据过滤和转换。 4. **模块(Modules)**:Erlang的模块系统有...

    Erlang国内下载真难

    10. **社区支持**:在下载和使用过程中遇到问题,可以寻求Erlang社区的帮助,如Stack Overflow、Erlang User Mailing List等,这些平台上有丰富的资源和经验分享。 总之,Erlang虽然在国内下载可能存在不便,但通过...

    RabbitMq3.85与erlang23的安装包.zip

    Erlang是一种静态类型、函数式编程语言,专为构建高可用性和容错性的分布式系统而设计。Erlang OTP(Open Telecom Platform)是Erlang的运行时环境,包含了众多工具和库,如进程管理、分布式计算、错误恢复等,为...

    windows Erlang otp_win64_22.3+rabbitmq-server-3.8.3.rar

    RabbitMQ作为一款广泛应用的消息中间件,基于开源的Erlang编程语言构建,具有高度可扩展性和高可用性。本文将详细介绍如何在Windows 64位系统上安装Erlang环境以及RabbitMQ服务器。 首先,我们关注的是标题中的...

    Erlang 速查表 v1.0.pdf

    Erlang是一种用于构建并发、分布和容错系统的编程语言和运行时环境。Erlang拥有一个独特的语法和一套内置的数据类型,以及专门为并发编程设计的库。下面将详细介绍Erlang速查表中提到的一些关键知识点。 ### 变量和...

Global site tag (gtag.js) - Google Analytics