我正在尝试将一个uint64数组的位Map到一个int数组(见下文)。BitSet 是一个[]uint64。下面是我当前设置的代码。但是我想知道golang中是否有一个std函数可以减少这个代码。其他语言有BitArray或其他对象,使生活变得更容易。
那么,在Golang中,我们必须编码吗?有更好的方法吗?
// Indexes the index positions of '1' bits as an int array
func (b BitSet) Indexes() []int {
// set up masks for bit ANDing
masks := make([]uint64, _BitsPerUint64)
for i := 0; i < _BitsPerUint64; i++ {
masks[i] = (1 << uint(i))
}
// iterate bitset
indexes := make([]int, 0, len(b)*4)
for i := 0; i < len(b); i++ {
for m := 0; m < _BitsPerUint64; m++ {
if masks[m]&b[i] > 0 {
indexes = append(indexes, i*_BitsPerUint64+m)
}
}
}
return indexes
}
2条答案
按热度按时间5anewei61#
r1zhe5dt2#
下面是我如何使用bitmask package(我是作者):