RoaringBitmap數據結構的Go移植

jopen 9年前發布 | 28K 次閱讀 JavaScript開發 RoaringBitmap

 Roaring bitmap數據結構的一個Go語言移植,Java版本可以查看:http://www.baiduhome.net/lib/view/open1419558335250.html

 Java 和 Go 兩個版本的二進制相兼容,因此用Java程序保存的bitmaps,可以用Go加載,反之亦然。

依賴

  • go get github.com/smartystreets/goconvey/convey
  • go get github.com/willf/bitset
  • </ul>

    Naturally, you also need to grab the roaring code itself:

    • go get github.com/tgruben/roaring

    示例

    Here is a simplified but complete example:

    package main
    
    import (
        "fmt"
        "github.com/tgruben/roaring"
        "bytes"
    )
    
    
    func main() {
        // example inspired by https://github.com/fzandona/goroa
        fmt.Println("==roaring==")
        rb1 := roaring.BitmapOf(1, 2, 3, 4, 5, 100, 1000)
        fmt.Println(rb1.String())
    
        rb2 := roaring.BitmapOf(3, 4, 1000)
        fmt.Println(rb2.String())
    
        rb3 := roaring.NewRoaringBitmap()
        fmt.Println(rb3.String())
    
        fmt.Println("Cardinality: ", rb1.GetCardinality())
    
        fmt.Println("Contains 3? ", rb1.Contains(3))
    
        rb1.And(rb2)
    
        rb3.Add(1)
        rb3.Add(5)
    
        rb3.Or(rb1)
    
        // prints 1, 3, 4, 5, 1000
        i := rb3.Iterator()
        for i.HasNext() {
            fmt.Println(i.Next())
        }
        fmt.Println()
    
        // next we include an example of serialization
        buf := new(bytes.Buffer)
        rb1.WriteTo(buf) // we omit error handling
        newrb:= NewRoaringBitmap()
        newrb.ReadFrom(buf)
        if rb1.Equals(newrb) {
            fmt.Println("I wrote the content to a byte stream and read it back.")
        }
    }

    項目主頁:http://www.baiduhome.net/lib/view/home/1419559030812

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!