zset

package
v0.6.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 11, 2022 License: BSD-3-Clause Imports: 5 Imported by: 0

Documentation

Index

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) Add

func (s *SortedSet) Add(ele KeyType, score int64) bool

添加或者更新一个元素的score

func (*SortedSet) Count

func (s *SortedSet) Count(min, max int64) int

score在[min, max]之间的元素数量

func (*SortedSet) GetRange

func (s *SortedSet) GetRange(start, end int, reverse bool) []KeyType

返回排名在[start, end]之间的所有元素

func (*SortedSet) GetRangeByScore

func (s *SortedSet) GetRangeByScore(min, max int64, reverse bool) []KeyType

获取score在[min, max]之间的所有元素

func (*SortedSet) GetRank

func (s *SortedSet) GetRank(ele KeyType, reverse bool) int

返回元素的排名,排名从0开始,如果元素不在zset里,返回-1

func (*SortedSet) GetScore

func (s *SortedSet) GetScore(ele KeyType) int64

获取元素的score

func (*SortedSet) Len

func (s *SortedSet) Len() int

func (*SortedSet) Remove

func (s *SortedSet) Remove(ele KeyType) bool

删除一个元素

func (*SortedSet) RemoveRangeByRank

func (s *SortedSet) RemoveRangeByRank(start, end int) int

删除排名在[start, end]之间的元素,排名从1开始

func (*SortedSet) RemoveRangeByScore

func (s *SortedSet) RemoveRangeByScore(min, max int64) int

删除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

func (zsl *ZSkipList) DeleteRangeByRank(start, end int, dict map[KeyType]int64) int

删除排名在[start-end]之间的节点,排名从1开始

func (*ZSkipList) DeleteRangeByScore

func (zsl *ZSkipList) DeleteRangeByScore(min, max int64, dict map[KeyType]int64) int

删除score在[min-max]之间的节点

func (*ZSkipList) Dump

func (zsl *ZSkipList) Dump(w io.Writer)

dump whole list to w, mostly for debugging

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) GetRank

func (zsl *ZSkipList) GetRank(score int64, ele KeyType) int

获取score所在的排名,排名从1开始

func (*ZSkipList) HeadNode

func (zsl *ZSkipList) HeadNode() *ZSkipListNode

头结点

func (*ZSkipList) Height

func (zsl *ZSkipList) Height() int

链表的层级

func (*ZSkipList) Insert

func (zsl *ZSkipList) Insert(score int64, ele KeyType) *ZSkipListNode

插入一个不存在的节点

func (*ZSkipList) IsInRange

func (zsl *ZSkipList) IsInRange(min, max int64) bool

Returns if there is a part of the zset is in range.

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.

func (*ZSkipList) Len

func (zsl *ZSkipList) Len() int

链表的节点数量

func (ZSkipList) String

func (zsl ZSkipList) String() string

func (*ZSkipList) TailNode

func (zsl *ZSkipList) TailNode() *ZSkipListNode

尾节点

type ZSkipListNode

type ZSkipListNode struct {
	Ele   KeyType
	Score int64
	// contains filtered or unexported fields
}

list node

func (*ZSkipListNode) Before

func (n *ZSkipListNode) Before() *ZSkipListNode

func (*ZSkipListNode) Next

func (n *ZSkipListNode) Next() *ZSkipListNode

Next return next forward pointer

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL