Я пытаюсь отобразить битовые позиции массива uint64 в массив int (см. Ниже). BitSet - это [] uint64. Ниже приведен мой код в настоящее время настройки. Но мне интересно, может ли быть функция std в golang, которая может уменьшить этот код. На другом языке есть BitArray или другие объекты, которые значительно облегчают жизнь.
Итак, на Голанге, мы должны закодировать это? Есть ли лучше сделать это?
// 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
}