erlang-gb_tree,gb_set

gb_tree, gb_set, 均为一个二叉树。具体怎么实现,这边不在累赘,官方有手册,

how to use ? 才是我们的重点

1. 初始化

1> gb_trees:empty().
{0,nil}
> gb_sets:empty().
{0,nil}
3>

这样即可完成初始化

2. 插入

gb_trees:insert/3

gb_sets:insert/2

3> gb_trees:insert(1,{1,100}, v(1)).
{1,{1,{1,100},nil,nil}}
4> gb_sets:in
insert/2 intersection/1 intersection/2
5> gb_sets:insert({1,100}, v(2)).
{1,{{1,100},nil,nil}

注意的是 gb_trees:insert(Key, Value, Trees).

gb_set:insert(Tuple, Sets).

3. 删除

6> gb_trees:delete(1, v(3)).
{0,nil}
7> gb_sets:del
del_element/2 delete/2 delete_any/2
7> gb_sets:delete(1, v(5)).
** exception error: no function clause matching gb_sets:delete_1(1,nil) (gb_sets.erl, line 408)
in function gb_sets:delete_1/2 (gb_sets.erl, line 409)
in call from gb_sets:delete/2 (gb_sets.erl, line 406)
8> gb_sets:delete({1,100}, v(5)).
{0,nil}

gb_trees:delete/2 根据主键删除

gb_sets:delete/2 根据tuple 删除

4.查询

gb_trees:lookup/2,

gb_trees:lookup(1, v(3)).
{value,{1,100}}

因为gb_sets 是在一切数据已知的情况下操作的,所以不存在查询操作

12> gb_sets:is_member({1,100},v(5)).
true
13>

5.求长度

gb_trees:size(v(3)).
1

gb_sets:size(v(5)).
1

6. 遍历

15> gb_trees:iterator(v(3)).  先获取一个gb_trees的迭代树
[{1,{1,100},nil,nil}]
16> gb_trees:next(v(15)).  根据迭代数,不断的去迭代,
{1,{1,100},[]}

gb_sets 也是一样的操作

但是他还有一个更好的函数 叫fold ,有兴趣的可以去看看哦,

这就是语法题gb_trees, gb_sets 的使用

时间: 2024-11-18 17:16:18

erlang-gb_tree,gb_set的相关文章

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, , }) -&g

安装RabbitMQ编译erlang时,checking for c compiler default output file name... configure:error:C compiler cannot create executables See &#39;config.log&#39; for more details.

checking for c compiler default output file name... configure:error:C compiler cannot create executables See 'config.log' for more details. 打开config.log查看明细: 网上找了下,说是没有安装cpp,libc5-devel,而在redhat中指的是glibc,glibc-devel,cpp,查看是否安装,: 果然没有,然后安装: 再次编译,发现换了一

安装及运行 RabbitMQ 服务器 (linux) 失败! 安装erlang 失败,无法继续

文档 http://www.rabbitmq.com/install-rpm.html 安装前置条件 Before installing RabbitMQ, you must install Erlang. 下载RabbitMQ 提供的 erlang-17.4-1.el6.x86_64.rpm 比其他三种方式简单 下载otp_src_18.0.tar.gz.td 从www.erlang.org 官网下载 下载rabbitmq-key.asc 签名文件 下载 rabbitmq-server-3.5

erlang使用gen_server实现质数服务器(手打代码,还debug了几个错误)

最近简单了解一下erlang语言,操练了一下书里的例子,有机会debug:下面是主要模块 prime_server,使用gen_server作为behaviour: 1 -module(prime_server). 2 -export([new_prime/1, start_link/0]). 3 4 -behaviour(gen_server). 5 -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/

[Erl_Question06]在Erlang shell怎么在目录A下编译目录B下的文件,并把生成文件统一放置目录C?

问题描述: 我们想快速测试一个小功能,第一个反应就是打开Erl shell 直接输入,但是当想测试一个复杂的函数时,一般会写成一个*.erl文件,然后在shell下: cd(FileDir). c(FileName). 每次都为一个小功能设置FileDir,好烦! 解决方法: 方法1 .  在erlang工作目录[在erl shell中运行pwd()显示的目录]建立一个.erlang文件,输入: io:format("changing work path~n"). cd("你

在Windows用Rebar来构建,编译,测试,发布Erlang项目

rebar是一个遵循 Erlang/OTP 原则的 Erlang 项目构建工具,使用它可以减少构建标准 Erlang/OTP 项目架构配置的工作量,并且可以很容易的编译.测试.发布 Erlang 应用程序.更强大的是,rebar 提供一种依赖管理机制,它可以使开发者很方便地通过 Git.Hg 等方式重用常见的第三方 Erlang 模块或库. 安装rebar 你可以在 https://github.com/rebar/rebar里下载zip包或者源代码自己编译. 在根目录下有一个文件bootstr

使用python脚本,读取excel表格生成erlang数据

为了将excel数据自动转换成所需要的erlang数据,听同事说使用python会很方便简单,就自学了两天python,写了一个比较粗糙的python脚本,不过能用,有什么优化的地方请指教 代码如下: #!/usr/bin/env python # -*- coding: UTF-8 -*- import sys from openpyxl.reader.excel import load_workbook import os import os.path def gen_data(filena

erlang节点互相ping,一个能ping通,另外一个不行。

今天发现一个问题,2个erlang节点,1个主动ping另外一个不通,然后等待另外一个ping过来,2个节点才连通.记录一下. 首先,erlang节点的cookie是一致的.查了文档,cookie一致就可以连通的. 其次,跟用户权限没关系,超级用户跟普通用户是一样的. 后来google了一番,发现了几个相同的情况: Erlang client cannot ping server until server has pinged client Erlang. Fix run multiple co

[Erlang]前人挖坑,后人还要进坑?(3)

?? 21.在生成随机数过程中一直使用: random:seed(erlang:now()). erlang:now()是可以一直递增的数,从不重复,但是不适合用于随机算法,最好使用下面这种: -spec get_random_num(integer()) -> integer(). get_random_num(Max) -> <<A:32, B:32, C:32>> = crypto:rand_bytes(12), random:seed({A,B,C}), ran