我正在尝试将uint64数组的位位置映射到一个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
}
答案 0 :(得分:2)
func (b BitSet) Indexes() []int {
retval := make([]int, 0, len(b)*64)
for idx, value := range b {
for i := 0; i < 64; i++ {
if value & (1<<uint(i)) != 0 {
retval = append(retval, idx*64 + i)
}
}
}
return retval
}