erlang資料結構 sets

2021-08-09 13:57:25 字數 982 閱讀 3312

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

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

參考:

Redis資料結構 Sets

格式 sadd key member member 示例 sadd myset 1 2 作用 新增乙個或者多個元素到set裡 成功 返剛剛新增到set中元素的個數 失敗 0 新增的元素重複 格式 scard key 示例 scard myset 作用 獲取集合裡面元素的個數 成功 返回集合中元素的個...

Redis資料結構之Sets

sadd 新增乙個或多個元素到集合裡 127.0 0.1 6379 sadd myset a b c d integer 4 127.0 0.1 6379 type myset setsmembers 獲得集合裡面所有的key 127.0.0.1 6379 smembers myset 1 a 2 ...

erlang 資料結構 proplists

從今天開始準備寫一系列關於erlang 資料結構的文章。今天是proplists 一種key value 資料結構。一種元素為 term 的lists 定義極其寬鬆 或者可以說proplists定義了一組關於lists的操作。所以最好從他的函式來看這個資料機構,而不是定義。1 l a,b,c,d,e...