Files
vRp.CD2g_test/utils/leaderboard/README.md
2024-01-15 17:27:02 +08:00

7.3 KiB

Leaderboard

Go doc

暂无介绍...

目录导航

列出了该 package 下所有的函数及类型定义,可通过目录导航进行快捷跳转 ❤️

展开 / 折叠目录导航

包级函数定义

函数名称 描述
NewBinarySearch 创建一个基于内存的二分查找排行榜
WithBinarySearchCount 通过限制排行榜竞争者数量来创建排行榜
WithBinarySearchASC 通过升序的方式创建排行榜

类型定义

类型 名称 描述
STRUCT BinarySearch 暂无描述...
STRUCT BinarySearchRankChangeEventHandle 暂无描述...
STRUCT BinarySearchOption 暂无描述...

详情信息

func NewBinarySearch[CompetitorID comparable, Score generic.Ordered](options ...BinarySearchOption[CompetitorID, Score]) *BinarySearch[CompetitorID, Score]

创建一个基于内存的二分查找排行榜

示例代码:


func ExampleNewBinarySearch() {
	bs := leaderboard2.NewBinarySearch[string, int](leaderboard2.WithBinarySearchCount[string, int](10))
	fmt.Println(bs != nil)
}


func WithBinarySearchCount[CompetitorID comparable, Score generic.Ordered](rankCount int) BinarySearchOption[CompetitorID, Score]

通过限制排行榜竞争者数量来创建排行榜

  • 默认情况下允许100位竞争者

func WithBinarySearchASC[CompetitorID comparable, Score generic.Ordered]() BinarySearchOption[CompetitorID, Score]

通过升序的方式创建排行榜

  • 默认情况下为降序

BinarySearch STRUCT

type BinarySearch[CompetitorID comparable, Score generic.Ordered] struct {
	*binarySearchEvent[CompetitorID, Score]
	asc                         bool
	rankCount                   int
	competitors                 *mappings.SyncMap[CompetitorID, Score]
	scores                      []*scoreItem[CompetitorID, Score]
	rankChangeEventHandles      []BinarySearchRankChangeEventHandle[CompetitorID, Score]
	rankClearBeforeEventHandles []BinarySearchRankClearBeforeEventHandle[CompetitorID, Score]
}

func (*BinarySearch) Competitor(competitorId CompetitorID, score Score)

声明排行榜竞争者

  • 如果竞争者存在的情况下,会更新已有成绩,否则新增竞争者

示例代码:


func ExampleBinarySearch_Competitor() {
	bs := leaderboard2.NewBinarySearch[string, int](leaderboard2.WithBinarySearchCount[string, int](10))
	scores := []int{6131, 132, 5133, 134, 135, 136, 137, 138, 139, 140, 222, 333, 444, 555, 666}
	for i := 1; i <= 15; i++ {
		bs.Competitor(fmt.Sprintf("competitor_%2d", i), scores[i-1])
	}
	for rank, competitor := range bs.GetAllCompetitor() {
		fmt.Println(rank, competitor)
	}
}


func (*BinarySearch) RemoveCompetitor(competitorId CompetitorID)

删除特定竞争者

示例代码:


func ExampleBinarySearch_RemoveCompetitor() {
	bs := leaderboard2.NewBinarySearch[string, int](leaderboard2.WithBinarySearchCount[string, int](10))
	scores := []int{6131, 132, 5133, 134, 135, 136, 137, 138, 139, 140, 222, 333, 444, 555, 666}
	for i := 1; i <= 15; i++ {
		bs.Competitor(fmt.Sprintf("competitor_%2d", i), scores[i-1])
	}
	bs.RemoveCompetitor("competitor_ 1")
	for rank, competitor := range bs.GetAllCompetitor() {
		fmt.Println(rank, competitor)
	}
}


func (*BinarySearch) Size() int

获取竞争者数量


func (*BinarySearch) GetRankDefault(competitorId CompetitorID, defaultValue int) int

获取竞争者排名,如果竞争者不存在则返回默认值

  • 排名从 0 开始

func (*BinarySearch) GetRank(competitorId CompetitorID) ( int, error)

获取竞争者排名

  • 排名从 0 开始

示例代码:


func ExampleBinarySearch_GetRank() {
	bs := leaderboard2.NewBinarySearch[string, int](leaderboard2.WithBinarySearchCount[string, int](10))
	scores := []int{6131, 132, 5133, 134, 135, 136, 137, 138, 139, 140, 222, 333, 444, 555, 666}
	for i := 1; i <= 15; i++ {
		bs.Competitor(fmt.Sprintf("competitor_%2d", i), scores[i-1])
	}
	fmt.Println(bs.GetRank("competitor_ 1"))
}


func (*BinarySearch) GetCompetitor(rank int) (competitorId CompetitorID, err error)

获取特定排名的竞争者


func (*BinarySearch) GetCompetitorWithRange(start int, end int) ( []CompetitorID, error)

获取第start名到第end名竞争者


func (*BinarySearch) GetScore(competitorId CompetitorID) (score Score, err error)

获取竞争者成绩


func (*BinarySearch) GetScoreDefault(competitorId CompetitorID, defaultValue Score) Score

获取竞争者成绩,不存在时返回默认值


func (*BinarySearch) GetAllCompetitor() []CompetitorID

获取所有竞争者ID

  • 结果为名次有序的

func (*BinarySearch) Clear()

清空排行榜


func (*BinarySearch) Cmp(s1 Score, s2 Score) int


func (*BinarySearch) UnmarshalJSON(bytes []byte) error


func (*BinarySearch) MarshalJSON() ( []byte, error)


func (*BinarySearch) RegRankChangeEvent(handle BinarySearchRankChangeEventHandle[CompetitorID, Score])


func (*BinarySearch) OnRankChangeEvent(competitorId CompetitorID, oldRank int, newRank int, oldScore Score, newScore Score)


func (*BinarySearch) RegRankClearBeforeEvent(handle BinarySearchRankClearBeforeEventHandle[CompetitorID, Score])


func (*BinarySearch) OnRankClearBeforeEvent()


BinarySearchRankChangeEventHandle STRUCT

type BinarySearchRankChangeEventHandle[CompetitorID comparable, Score generic.Ordered] func(leaderboard *BinarySearch[CompetitorID, Score], competitorId CompetitorID, oldRank int, oldScore Score)

BinarySearchOption STRUCT

type BinarySearchOption[CompetitorID comparable, Score generic.Ordered] func(list *BinarySearch[CompetitorID, Score])