Elixir-Tuples

本文介绍了Elixir中的Tuples,强调其不可变性和快速访问特性。Tuples通过花括号表示,内存中存储元素连续,允许高效地通过索引获取元素和计算尺寸。同时,文章提到了两个函数:elem/2用于获取元素,put_elem/3用于更新元素值。相比之下,List的存储方式为链式,头部追加元素快速,但尾部操作效率较低。Tuples常用于函数返回值,而Lists适合处理head和tail操作的场景。

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的场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值