使用String和Integers将列表拆分为多个列表

时间:2017-11-28 12:02:17

标签: scala

我有如下输入:

List("aabc", 3, 1, 2, 1, "vwxyz", 2, 3, 4, "sdsafw", 4, 1, 2, 22, 4)

我想把它拆分如下:

List(List(“aabc”, 3, 1, 2, 1), List(“vwxyz”, 2, 3, 4), List(“sdsafw”, 4, 1, 2, 22, 4))

List(List(“aabc”, 1, 2, 1), List(“vwxyz”, 3, 4), List(“sdsafw”, 1, 2, 22, 4))

(每个“字符串”之后的数字实际上表示有多少整数来自它。如果它可以很好地完成,我想在此时删除它。)

你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:1)

如果您有val list = List("aabc", 3, 1, 2, 1, "vwxyz", 2, 3, 4, "sdsafw", 4, 1, 2, 22, 4)

def splitList(list: List[Any], tempList: List[Any], listBuffer: ListBuffer[List[Any]]): ListBuffer[List[Any]] = list match {
  case x :: y => if(tempList.isEmpty){
      splitList(y, List(x), listBuffer)
    }
    else {
      splitList(y.drop(x.asInstanceOf[Int]), List.empty, listBuffer += tempList ++ List(x) ++ y.take(x.asInstanceOf[Int]))
    }
  case Nil => listBuffer
}

然后你可以将递归函数写成

println(splitList(list, List.empty, ListBuffer.empty[List[Any]]))

调用此功能

ListBuffer(List(aabc, 3, 1, 2, 1), List(vwxyz, 2, 3, 4), List(sdsafw, 4, 1, 2, 22, 4))

会为您提供所需的输出

ListBuffer

您可以根据需要使用ArrayListdef splitList(list: List[Any], tempList: List[Any], listBuffer: ListBuffer[List[Any]]): ListBuffer[List[Any]] = list match { case x :: y => if (x.isInstanceOf[String]) { if(!tempList.isEmpty){ splitList(y, List(x), listBuffer += tempList) } else { splitList(y, List(x), listBuffer) } }else splitList(y, tempList ++ List(x), listBuffer) case Nil => listBuffer += tempList } 来操作所需的输出。

另一种形式的解决方案可以使用以下递归函数

gcloud components update