Arrays 在Scala中将布尔数组转换为字节的最快方法是什么?
在Scala中实现了huffman算法之后,我现在剩下一个长度超过10.000的位数组。现在,我想将这个数组转换为字节,并以最快的方式将其写入文件 我目前有以下算法:Arrays 在Scala中将布尔数组转换为字节的最快方法是什么?,arrays,scala,optimization,binary,Arrays,Scala,Optimization,Binary,在Scala中实现了huffman算法之后,我现在剩下一个长度超过10.000的位数组。现在,我想将这个数组转换为字节,并以最快的方式将其写入文件 我目前有以下算法: val bits = encode(createCodeTree(fileChars))(fileChars) val string = new StringBuilder for(List(b1,b2,b3,b4,b5,b6,b7,b8) <- bits.grouped(8)) string.append(bitsToBy
val bits = encode(createCodeTree(fileChars))(fileChars)
val string = new StringBuilder
for(List(b1,b2,b3,b4,b5,b6,b7,b8) <- bits.grouped(8)) string.append(bitsToByte(b1,b2,b3,b4,b5,b6,b7,b8))
def bitsToByte(bits : Boolean*) : Char = {
var amount = 0;
for(i <- 1 until bits.length){
amount += (if(bits(i-1)) 1 else 0) * scala.math.pow(2,i).intValue()
}
amount.toChar
}
val bits=encode(createCodeTree(fileChars))(fileChars)
val string=新的StringBuilder
对于(列表(b1、b2、b3、b4、b5、b6、b7、b8)我不知道这是否快得多,但它肯定更简洁
bits.grouped(8)
.map(_.foldLeft(0)((i,b) => (i<<1) + (if(b) 1 else 0)).toChar)
.mkString
位。分组(8)
.map(uu.foldLeft(0)((i,b)=>(ichar翻译更为正确
这假设位是从左到右的从高到低的有效位。如果不是这样,那么将折叠从.foldLeft(0)((i,b)=>…
更改为。…
我不知道这是否快得多,但它肯定更简洁
bits.grouped(8)
.map(_.foldLeft(0)((i,b) => (i<<1) + (if(b) 1 else 0)).toChar)
.mkString
位。分组(8)
.map(uu.foldLeft(0)((i,b)=>(ichar翻译更为正确
这假设位是从左到右的从高到低的有效位。如果不是这种情况,则将折叠
从.foldLeft(0)((i,b)=>…
更改为.foldRight(0)((b,i)=>…
我使用之前的算法完全错误地转换了一些位。谢谢!我使用之前的算法完全错误地转换了一些位。谢谢!