Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gansidui/skiplist
skiplist for golang
https://github.com/gansidui/skiplist
Last synced: about 2 months ago
JSON representation
skiplist for golang
- Host: GitHub
- URL: https://github.com/gansidui/skiplist
- Owner: gansidui
- Created: 2014-11-18T16:29:53.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2014-11-21T05:13:52.000Z (about 10 years ago)
- Last Synced: 2024-07-31T20:48:41.289Z (5 months ago)
- Language: Go
- Size: 112 KB
- Stars: 84
- Watchers: 7
- Forks: 24
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-go - skiplist - Skiplist implementation in Go. (Data Structures and Algorithms / Trees)
- awesome-go - skiplist - skiplist for golang - ★ 57 (Data Structures)
- awesome-go-extra - skiplist - 11-18T16:29:53Z|2014-11-21T05:13:52Z| (Generators / Trees)
README
skiplist
===============reference from redis [zskiplist](https://github.com/antirez/redis)
Usage
===============~~~Go
package main
import (
"fmt"
"github.com/gansidui/skiplist"
"log"
)type User struct {
score float64
id string
}func (u *User) Less(other interface{}) bool {
if u.score > other.(*User).score {
return true
}
if u.score == other.(*User).score && len(u.id) > len(other.(*User).id) {
return true
}
return false
}func main() {
us := make([]*User, 7)
us[0] = &User{6.6, "hi"}
us[1] = &User{4.4, "hello"}
us[2] = &User{2.2, "world"}
us[3] = &User{3.3, "go"}
us[4] = &User{1.1, "skip"}
us[5] = &User{2.2, "list"}
us[6] = &User{3.3, "lang"}// insert
sl := skiplist.New()
for i := 0; i < len(us); i++ {
sl.Insert(us[i])
}// traverse
for e := sl.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value.(*User).id, "-->", e.Value.(*User).score)
}
fmt.Println()// rank
rank1 := sl.GetRank(&User{2.2, "list"})
rank2 := sl.GetRank(&User{6.6, "hi"})
if rank1 != 6 || rank2 != 1 {
log.Fatal()
}
if e := sl.GetElementByRank(2); e.Value.(*User).score != 4.4 || e.Value.(*User).id != "hello" {
log.Fatal()
}
}/* output:
hi --> 6.6
hello --> 4.4
lang --> 3.3
go --> 3.3
world --> 2.2
list --> 2.2
skip --> 1.1*/
~~~
License
===============MIT