Arrays Scala阵列分裂
对于给定的Arrays Scala阵列分裂,arrays,scala,collections,split,Arrays,Scala,Collections,Split,对于给定的数组[字节],例如 val in = Array(104, 101, 108, 108, 111, 10, 119, 111, 114, 108, 100, 10) 如何按值拆分它10,以便 val out = in.arr_split(10) 将交付 Array( Array(104, 101, 108, 108, 111), Array(119, 111, 114, 108, 100)) 通常假设拆分元素多次出现,例如许多10 如果可能,需要并行解决方案 非常
数组[字节]
,例如
val in = Array(104, 101, 108, 108, 111, 10, 119, 111, 114, 108, 100, 10)
如何按值拆分它10
,以便
val out = in.arr_split(10)
将交付
Array( Array(104, 101, 108, 108, 111),
Array(119, 111, 114, 108, 100))
通常假设拆分元素多次出现,例如许多10
如果可能,需要并行解决方案
非常感谢。像这样的方法应该会奏效:
def split(l: Array[Int], i:Int):Array[Array[Int]] = {
l match {
case Array() => Array()
case _ =>
val (h, t) = l.span(a => a != i)
Array(h) ++ split(t.drop(1), i)
}
}
val in = Array(104, 101, 108, 108, 111, 10, 119, 111, 114, 108, 100, 10)
val out = split(in, 10)
// res: Array[Array[Int]] = Array(Array(104, 101, 108, 108, 111), Array(119, 111, 114, 108, 100))
解决方案。这里我用向量代替数组
val in = Vector(104, 101, 108, 108, 111, 10, 119, 111, 114, 108, 100, 10)
val P = scalaz.stream.Process
implicit val eq = scalaz.Equal.equal[Int]((l, r) => l == r)
println(P.emitSeq[Task, Int](in).splitOn(10).filter(!_.isEmpty).runLog.run)
输出:
Vector(Vector(104, 101, 108, 108, 111), Vector(119, 111, 114, 108, 100))
皮条版本
implicit def toDivide[A, B <% TraversableLike[A, B]](a : B) = new {
private def divide(x : B, condition: (A) => Boolean) : Iterable[B] = {
if (x.size > 0)
x.span(condition) match {
case (e, f) => if (e.size > 0) Iterable(e) ++ divide(f.drop(1),condition) else Iterable(f)
}
else
Iterable()
}
def divide(condition: (A) => Boolean): Iterable[B] = divide(a, condition)
}
implicit def toDivide[A,B布尔值):Iterable[B]={
如果(x.size>0)
x、 跨度(条件)匹配{
案例(e,f)=>如果(e.size>0)可计算(e)+除以(f.drop(1),条件)否则可计算(f)
}
其他的
Iterable()
}
def divide(条件:(A)=>布尔值):Iterable[B]=divide(A,条件)
}
将其转换为字符串(在我看来很像ascii值),然后使用“拆分”将其拆分为新行。