今天抽空介绍tuple list数据结构在实际开发过程中与record配合的应用,我这里只是说明一种应用场景,另外的扩展应用有待大家一起去发掘。
tuple list数据结构,适合的应用场合就是:查找,更新,删除,排序,更简洁的归纳的话就是:查找和更新。
来看一个实际例子:
我有一大堆商品,需要对这些商品进行更新和查找操作(这里没有用数据库,全部是在内存中)。先看商品的数据结构:
- -record(goods, {
- goods_id = 0,
- price = 0,
- type = 0,
- expire = 0
- }).
这里只是一个商品数据结构的演示,真实情况下,这个数据结构包含的信息更多。
这里有一个tuple list数据结构,存放的都是各式各样的商品信息,叫做GoodsList,我们需要在里面进行查找和更新,下面看具体的用法:
查找:
- 以商品record的某个字段为key进行查找,这里假设以goods_id为key来查找:
- case lists:keyfind(Id, #goods.goods_id, GoodsList) of
- Goods = #goods{goods_id = Id} -> {ok, Goods};
- _ -> {error, not_found}
- end.
更新:
- 假设要更新商品中某个商品的某些信息,这里假设把某个商品的过期时间expire更新一下:
- case lists:keyfind(Id, #goods.goods_id, GoodsList) of
- Goods = #goods{goods_id = Id} ->
- lists:keyreplace(Id, #goods.goods_id, GoodsList, Goods#goods{expire = 86400});
- _ -> {error, not_found}
- end.
排序:
- 根据价格来排列:
- NewGoodsList = lists:keysort(#goods.price, GoodsList).
类似的,还有很多应用可以挖掘出来。
转载于:https://blog.51cto.com/10lover10/1101700