是否有更好的方法将字节序列转换为 Seq[Boolean],其中每个元素代表字节序列中的一个位?
我目前正在这样做,但是 byte2Bools 似乎有点太重了......
object Main extends App {
private def byte2Bools(b: Byte) =
(0 to 7).foldLeft(ArrayBuffer[Boolean]())((bs, i) => bs += isBitSet(b, i))
private def isBitSet(byte: Byte, bit: Int) =
((byte >> bit) & 1) == 1
val bytes = List[Byte](1, 2, 3)
val bools = bytes.flatMap(b => byte2Bools(b))
println(bools)
}
也许真正的问题是:byte2Bools 的更好实现是什么?
最佳答案
首先,foldLeft
中的累加器不一定是可变集合。
def byte2Bools(b: Byte): Seq[Boolean] =
(0 to 7).foldLeft(Vector[Boolean]()) { (bs, i) => bs :+ isBitSet(b)(i) }
其次,您可以使用 isBitSet
映射初始序列。
def byte2Bools(b: Byte): Seq[Boolean] =
0 to 7 map isBitSet(b)
def isBitSet(byte: Byte)(bit: Int): Boolean =
((byte >> bit) & 1) == 1
关于scala - 如何将 Seq[Byte] 转换为 Array[Boolean] 表示 Scala 中的每一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267771/