Tuples
- immutable不可变的
- tuple 语法格式为:{ },大括号(花括号),大括号里的值可以为任意数据类型;
- tuple 在内存中存储元素时连续的,所以tuple可以通过 index下标获取tuple中指定位的元素(index从0开始);可以获取tuple的尺寸,这些操作的速度都很快。
Function
- elem/2,获取tuple指定位的元素,
elem(tuple, 1) - put_elem/3,更新tuple中已存在位的元素值,如果更新的位不存在,则会报错
iex(77)> tuple = {:ok, "nihao"} {:ok, "nihao"} iex(78)> elem(tuple,1) # 获取1位上的值 "nihao" iex(79)> elem(tuple,0) # 获取0位上的值 :ok iex(80)> put_elem(tuple, 1, "wode") # 更新1位的值 {:ok, "wode"} iex(81)> put_elem(tuple, 2, "1") # 更新不存在位的值,错误提示超出范围 ** (ArgumentError) errors were found at the given arguments: * 1st argument: out of range :erlang.setelement(3, {:ok, "nihao"}, "1") iex(81)> - tuple_size/1: 获取tuple的尺寸
List 采用的是链式存储的方式,意思是每个元素需要保存自己本身的值和指向下一个元素的指针;这种存储方式意味着如果想要读取list的长度,或是向list增加元素,必须将整个list找到,才能进行操作;头部追加元素,速度很快,尾部追加元素,与元素的多少相关;
Tuple采用的是连续性存储方式,这种存储方式访问元素非常快,但是更新或是修改元素,内存开销很大。
应用场景
- tuple,一个比较通用的场景是作为函数的返回值
- list,适用于取head,tail的场景
本文介绍了Elixir中的Tuples,强调其不可变性和快速访问特性。Tuples通过花括号表示,内存中存储元素连续,允许高效地通过索引获取元素和计算尺寸。同时,文章提到了两个函数:elem/2用于获取元素,put_elem/3用于更新元素值。相比之下,List的存储方式为链式,头部追加元素快速,但尾部操作效率较低。Tuples常用于函数返回值,而Lists适合处理head和tail操作的场景。
1238

被折叠的 条评论
为什么被折叠?



