erlang数据结构-- sets

来源:互联网 发布:网络歌曲偷菜歌 编辑:程序博客网 时间:2024/05/21 18:39

今天是sets,

1. 类型:

在erlang中sets的数据结构有四种, ordsets, sets, gb_sets, sofs。

2. 定义:

ordsets: 有序集合
sets: 集合
gb_sets: AA 平衡二叉树实现的有序集合
sofs: Sets of sets (sofs) 集合的集合

3. 接口函数:

ordsets, sets 有一样的接口函数(所谓对于集合的一般操作), gb_sets 提供了更多的接口函数, 比如对于最大值和最小值的处理等。

4. 优缺点:

sets的这些类型,ordsets, sets, gb_sets 基本可以对应到key-value 的数据类型 orddict,dict, gb_trees ;优缺点也类似。 还有一个类型是sofs,相对于其他蛮特殊的类型, 不做比较。

5. notes:

gb_sets, ordset, sofs 使用== 来判断,也就是说1,1.0 是一个元素。 而sets用=:= 来判断。

6. 使用场合:

otp团队建议在大多数情况下使用gb_sets, 如果你想要用一种更加清晰的方式来表达程序,可以再适当的时候选择ordset。 当然如果你需要使用=:= 操作符号,就只能使用sets了。

7. 函数细节:

ordsets,sets 都很好理解,和查看。 接下来解释gb_sets。

7.1 gb_sets:balance/1

和gb_trees 很像, 一般不会调用这个函数, 如果一下子删除了很多元素, 那么可以调用这个函数来重新平衡树,因为删除操作不会平衡树, 这样做可以减少lookup的时间。

7.2 gb_sets 迭代

可以使用 fold/1 或者 iterator/1, iterator/2, next/1

7.3 gb_sets:take_smallest/1, take_largest/1

对最大值和最小值的操作。

参考:http://learnyousomeerlang.com/a-short-visit-to-common-data-structures

原创粉丝点击