今天抽空介绍tuple list数据结构在实际开发过程中与record配合的应用,我这里只是说明一种应用场景,另外的扩展应用有待大家一起去发掘。

    tuple list数据结构,适合的应用场合就是:查找,更新,删除,排序,更简洁的归纳的话就是:查找和更新。

   来看一个实际例子:

   我有一大堆商品,需要对这些商品进行更新和查找操作(这里没有用数据库,全部是在内存中)。先看商品的数据结构:

 
  
  1. -record(goods, { 
  2.     goods_id = 0, 
  3.     price = 0, 
  4.     type = 0, 
  5.     expire = 0 
  6. }). 

这里只是一个商品数据结构的演示,真实情况下,这个数据结构包含的信息更多。

这里有一个tuple list数据结构,存放的都是各式各样的商品信息,叫做GoodsList,我们需要在里面进行查找和更新,下面看具体的用法:

查找:

 
  
  1. 以商品record的某个字段为key进行查找,这里假设以goods_id为key来查找: 
  2.     case lists:keyfind(Id, #goods.goods_id, GoodsList) of 
  3.         Goods = #goods{goods_id = Id} -> {ok, Goods}; 
  4.         _ -> {error, not_found} 
  5.     end

更新:

 
  
  1. 假设要更新商品中某个商品的某些信息,这里假设把某个商品的过期时间expire更新一下: 
  2.     case lists:keyfind(Id, #goods.goods_id, GoodsList) of 
  3.         Goods = #goods{goods_id = Id} ->  
  4.             lists:keyreplace(Id, #goods.goods_id, GoodsList, Goods#goods{expire = 86400}); 
  5.         _ -> {error, not_found} 
  6.     end

排序:

 
  
  1. 根据价格来排列: 
  2.     NewGoodsList = lists:keysort(#goods.price, GoodsList). 

类似的,还有很多应用可以挖掘出来。