我没有在Go中找到BitSet包,所以我尝试实现它.我想使用uint64数组来存储这些位.
我需要分配uint64数组的位数.使用Java,我可以定义一个带整数的构造函数.虽然Go不提供构造函数,但是当用户调用new()时如何正确初始化BitSet'对象'?
Las*_*ssi 11
Go 的标准big.Int可以用作位集:
package main
import (
"fmt"
"math/big"
)
func main() {
var bits big.Int
for i := 1000; i < 2000; i++ {
bits.SetBit(&bits, i, 1)
}
for i := 0; i < 10000; i++ {
if bits.Bit(i) != 0 {
fmt.Println(i)
}
}
}
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/xbIK-boouqC
小智 5
将 bitSet 声明为私有结构:
type bitSet struct {
len int
array []uint64
}
Run Code Online (Sandbox Code Playgroud)
暴露接口BitSet:
type BitSet interface {
Has(pos int) bool
Add(pos int) bool
Len() int
}
Run Code Online (Sandbox Code Playgroud)
还公开一个函数 NewBitSet:
func NewBitSet(len int) BitSet {
return &bitSet{len, make(uint64, (len+7) / 8) }
}
Run Code Online (Sandbox Code Playgroud)
这是 Go 的封装方式:共享接口,而不是实现。
| 归档时间: |
|
| 查看次数: |
4064 次 |
| 最近记录: |