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值),然后使用“拆分”将其拆分为新行。