如何通过1的位置列表解码0和1的列表?

she*_*heh 3 scala

我想创建一个List[Int]仅包含0和1的位置.在数组中定义的零和1的位置

val bitMask = List(2,5,6,11,...,621,655)
Run Code Online (Sandbox Code Playgroud)

bitMask - 是结果列表中的位置列表,结果列表的项目为零

结果我想得到

result = List(0,0,1,0,0,1,1,0,...,0,1)
Run Code Online (Sandbox Code Playgroud)

将结果的长度计算为 bitMask.last + 1

我用这段代码做到了:

result = List.fill(bitMask.last+1)(0).zipWithIndex.map(i => if (bitMask.contains(i._2)) 1 else 0)
Run Code Online (Sandbox Code Playgroud)

可能有一个更简单,更scala-way的解决方案?

om-*_*nom 6

BitSet将提供更高效的查找(事实上,如果你想使用联合,区别等,它会更好):

val mask = scala.collection.BitSet(2,5,6,11)
(0 to 100).map(mask)
// Vector(false, false, true, false, false, ...) 
Run Code Online (Sandbox Code Playgroud)

从布尔值转换为0/1应该是微不足道的