Erlang gb_tree操作

1、gb_tree的查询操作:
lookup(Key, {_, T}) ->

lookup_1(Key, T).

lookup_1(Key, {Key1, , Smaller, }) when Key < Key1 ->

lookup_1(Key, Smaller);

lookup_1(Key, {Key1, , , Bigger}) when Key > Key1 ->

lookup_1(Key, Bigger);

lookup_1(, {, Value, , }) ->

{value, Value};

lookup_1(_, nil) ->

none.

2、gb_tree的更新操作:
update_1(Key, Value, {Key1, V, Smaller, Bigger}) when Key < Key1 ->

{Key1, V, update_1(Key, Value, Smaller), Bigger};

update_1(Key, Value, {Key1, V, Smaller, Bigger}) when Key > Key1 ->

{Key1, V, Smaller, update_1(Key, Value, Bigger)};

update_1(Key, Value, {, , Smaller, Bigger}) ->

{Key, Value, Smaller, Bigger}.

3、gb_tree查找所有键值操作:
keys({_, T}) ->

keys(T, []).

keys({Key, _Value, Small, Big}, L) ->

keys(Small, [Key | keys(Big, L)]);

keys(nil, L) -> L.
4、gb_tree查找所有value操作:
values({_, T}) ->

values(T, []).

values({_Key, Value, Small, Big}, L) ->

values(Small, [Value | values(Big, L)]);

values(nil, L) -> L.
5、take_largest操作:
take_largest({Size, Tree}) when is_integer(Size), Size >= 0 ->

{Key, Value, Smaller} = take_largest1(Tree),
{Key, Value, {Size - 1, Smaller}}.

take_largest1({Key, Value, Smaller, nil}) ->

{Key, Value, Smaller};

take_largest1({Key, Value, Smaller, Larger}) ->

{Key1, Value1, Larger1} = take_largest1(Larger),
{Key1, Value1, {Key, Value, Smaller, Larger1}}.

Erlang gb_tree操作

时间: 2024-12-25 05:56:19

Erlang gb_tree操作的相关文章

Erlang 基础操作 练习题

1 % ****************************************************************************** 2 % ------------------------------------------------------------------------------ 3 % 习题 5 4 % 合并列表,A=[{a,1},{b,2},{c,3},{b,1}],B=[{b,4},{c,5},{d,6},{d,2}]. 5 % 结果:[{

Erlang学习笔记2

http://wgcode.iteye.com/blog/1007623 第二章 入门 1.所有的变量都必须以大写字母开头,如果要查看某个变量,只要输入变量的名字即可,如果一个变量被赋予值,就称为绑定变量,否则被称为自由变量,一开始所有变量都是自由的. 有一点像Java中的常量,这就是为什么用大写字母的原因. 2.  “=” 近似于一个赋值操作符,是一个模式匹配运算符,当X是自由变量未被赋值时“=”是赋值运算符,否则是模式匹配运算符. 3. “/”除号永远返回浮点数. 4. 原子用来表示不同的非

[python01] python列表,元组对比Erlang的区别总结

数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构. python最基本的数据结构是sequence(序列):6种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象. 对比归纳:列表,元组在Erlang与python中的区别: 1. 通用操作: Python的列表更像是C中的数组,但是比那更灵活,和Erlang的列表大有不同. 1.1 python列表索引从0开始并可以是负数.可以使用 >>>nu

erlang note

没有关于erlang interface ,继续寻找吧... ----------------------------------------------------------------- http://wgcode.iteye.com/blog/1018614 第二章 入门 1.所有的变量都必须以大写字母开头,如果要查看某个变量,只要输入变量的名字即可,如果一个变量被赋予值,就称为绑定变量,否则被称为自由变量,一开始所有变量都是自由的. 有一点像Java中的常量,这就是为什么用大写字母的原

Erlang 杂记

学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分,分享一下. Erlang的设计哲学是为每一个独立的事件创建一个新进程. Erlang的容错处理:如果不能完成一个任务就死掉 让其它正常的进程来善后.link函数就是用来建立这种进程间的双向连接来监测非正常退出,并做出处理. BIFs是built-in functions的缩写代表这些方法是Erlang运行时系统的一部分 side-effect-free无副作用,其中一种定义是说:

海龙-redhat6.x64位系列 yum极速安装最新版rabbitmq及erlang

redhat6.x64位系列 yum极速安装最新版rabbitmq及erlang 简易操作步骤: [注意]:如果网速比较差,可以先源码安装好erlang环境后,设置好系统变量后再使用rpm直接安装rabbitmq即可.网络可以还是建议直接全部yum安装 安装RabbitMQ # rpm -i --nodeps rabbitmq-server-3.6.6-1.e16.noarch.rpm 直接用#rpm -i rabbitmq-server-3.6.6-1.noarch.rpm,会提示缺少erla

十种NoSQL数据库以及对比

 虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动.尽管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟.稳定.不过现在也面临着一个严酷的事实:技术越来越成熟--以至于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本.这里列出一些比较知名的工具,可以为大数据建立快速.可扩展的存储库. 1. Casssandra Cassandra最初由Facebook开发,后来成了Apache开源项目,它是一个网络社交云计算方面理

八种Nosql数据库系统对比

文章来源:http://article.yeeyan.org/view/271351/239915 尽管SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举. 但是NoSQL数据库之间的不同,远超过两个 SQL数据库之间的差别.这意味着软件架构师更应该在项目开始时就选择好一个适合的 NoSQL数据库. 针对这种情况,这里对 Cassandra. Mongodb.CouchDB.Redis. Riak.M

八种主流NoSQL数据库对比

摘要:虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举.详见我的IT-Homer博客: 八种主流NoSQL数据库对比 简介 NoSQL,是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储.现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改变这一现状.目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数