我有如下输入:
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))
(每个“字符串”之后的数字实际上表示有多少整数来自它。如果它可以很好地完成,我想在此时删除它。)
你能告诉我怎么做吗?
答案 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
您可以根据需要使用Array
或List
或def 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