Documentation
¶
Index ¶
- Constants
- type KeyType
- type SortedSet
- func (s *SortedSet) Add(ele KeyType, score int64) bool
- func (s *SortedSet) Count(min, max int64) int
- func (s *SortedSet) GetRange(start, end int, reverse bool) []KeyType
- func (s *SortedSet) GetRangeByScore(min, max int64, reverse bool) []KeyType
- func (s *SortedSet) GetRank(ele KeyType, reverse bool) int
- func (s *SortedSet) GetScore(ele KeyType) int64
- func (s *SortedSet) Len() int
- func (s *SortedSet) Remove(ele KeyType) bool
- func (s *SortedSet) RemoveRangeByRank(start, end int) int
- func (s *SortedSet) RemoveRangeByScore(min, max int64) int
- type ZSkipList
- func (zsl *ZSkipList) Delete(score int64, ele KeyType) *ZSkipListNode
- func (zsl *ZSkipList) DeleteRangeByRank(start, end int, dict map[KeyType]int64) int
- func (zsl *ZSkipList) DeleteRangeByScore(min, max int64, dict map[KeyType]int64) int
- func (zsl *ZSkipList) Dump(w io.Writer)
- func (zsl *ZSkipList) FirstInRange(min, max int64) *ZSkipListNode
- func (zsl *ZSkipList) GetElementByRank(rank int) *ZSkipListNode
- func (zsl *ZSkipList) GetRank(score int64, ele KeyType) int
- func (zsl *ZSkipList) HeadNode() *ZSkipListNode
- func (zsl *ZSkipList) Height() int
- func (zsl *ZSkipList) Insert(score int64, ele KeyType) *ZSkipListNode
- func (zsl *ZSkipList) IsInRange(min, max int64) bool
- func (zsl *ZSkipList) LastInRange(min, max int64) *ZSkipListNode
- func (zsl *ZSkipList) Len() int
- func (zsl ZSkipList) String() string
- func (zsl *ZSkipList) TailNode() *ZSkipListNode
- type ZSkipListNode
Examples ¶
Constants ¶
View Source
const ( ZSKIPLIST_MAXLEVEL = 12 // Should be enough ZSKIPLIST_P = 0.25 // Skiplist P = 1/4 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type KeyType ¶ added in v0.1.28
type KeyType = collections.Comparable
type SortedSet ¶
type SortedSet struct {
// contains filtered or unexported fields
}
跳表实现的有序字典
func NewSortedSet ¶
func NewSortedSet() *SortedSet
func (*SortedSet) GetRangeByScore ¶
获取score在[min, max]之间的所有元素
func (*SortedSet) RemoveRangeByRank ¶
删除排名在[start, end]之间的元素,排名从1开始
func (*SortedSet) RemoveRangeByScore ¶
删除score区间[min, max]的元素
type ZSkipList ¶
type ZSkipList struct {
// contains filtered or unexported fields
}
带索引的排序链表
Example ¶
var playerMap = make(map[int64]*testPlayer) var zset = NewSortedSet() //简单的测试角色数据 var p1 = &testPlayer{Uid: 1001, Level: 12, Point: 2012} var p2 = &testPlayer{Uid: 1002, Level: 13, Point: 2015} var p3 = &testPlayer{Uid: 1003, Level: 14, Point: 2014} var p4 = &testPlayer{Uid: 1004, Level: 11, Point: 2014} var p5 = &testPlayer{Uid: 1005, Level: 14, Point: 2011} playerMap[p1.Uid] = p1 playerMap[p2.Uid] = p2 playerMap[p3.Uid] = p3 playerMap[p4.Uid] = p4 playerMap[p5.Uid] = p5 //插入角色数据到zskiplist for _, v := range playerMap { zset.Add(v, v.Point) } //打印调试信息 // fmt.Printf("%v\n", zset.zsl) //获取角色的排行信息 var rank = zset.GetRank(p1, false) // in ascend order var myRank = zset.Len() - rank + 1 // get descend rank fmt.Printf("rank of %d: %d\n", p1.Uid, myRank) //根据排行获取角色信息 //var node = zset.GetRank(rank) //var player = playerMap[node.Obj.Uuid()] //fmt.Printf("rank at %d is: %s\n", rank, player.name) // ////遍历整个zskiplist //zsl.Walk(true, func(rank int, v RankInterface) bool { // fmt.Printf("rank %d: %v", rank, v) // return true //}) // ////从zset中删除p1 //if !zset.Remove(p1) { // // error handling //} // //p1.score += 10 //if zset.Insert(p1.score, p1) == nil { // // error handling //}
Output:
func NewZSkipList ¶
func NewZSkipList() *ZSkipList
func (*ZSkipList) Delete ¶
func (zsl *ZSkipList) Delete(score int64, ele KeyType) *ZSkipListNode
删除对应score的节点
func (*ZSkipList) DeleteRangeByRank ¶
删除排名在[start-end]之间的节点,排名从1开始
func (*ZSkipList) DeleteRangeByScore ¶
删除score在[min-max]之间的节点
func (*ZSkipList) FirstInRange ¶
func (zsl *ZSkipList) FirstInRange(min, max int64) *ZSkipListNode
Find the first node that is contained in the specified range. Returns NULL when no element is contained in the range.
func (*ZSkipList) GetElementByRank ¶
func (zsl *ZSkipList) GetElementByRank(rank int) *ZSkipListNode
根据排名获得节点,排名从1开始
func (*ZSkipList) Insert ¶
func (zsl *ZSkipList) Insert(score int64, ele KeyType) *ZSkipListNode
插入一个不存在的节点
func (*ZSkipList) LastInRange ¶
func (zsl *ZSkipList) LastInRange(min, max int64) *ZSkipListNode
Find the last node that is contained in the specified range. Returns NULL when no element is contained in the range.
type ZSkipListNode ¶
list node
func (*ZSkipListNode) Before ¶
func (n *ZSkipListNode) Before() *ZSkipListNode
func (*ZSkipListNode) Next ¶
func (n *ZSkipListNode) Next() *ZSkipListNode
Next return next forward pointer
Click to show internal directories.
Click to hide internal directories.