首页 > 解决方案 > 如何将行/字符串列表制作成子列表

问题描述

抱歉,如果以前有人问过这个问题,但我一直在寻找解决方案。

我有一个字符串列表;

val a = List("size 34", "help","panne","size 35","kake", "test","size 34", "help", "panne","size 35", "kake", "test")

我想让它们成为一个多重列表。喜欢;

val b = List("size 34", "help","panne")
val c = List("size 35","kake", "test")

例如,当它看到某个单词的开头时,我想将原始列表拆分为一个新列表;当字符串以 size 开头时,它会拆分为一个新列表。

我已经弄清楚如何获得某个字符串;

val sequenceWithPlainAndGlazedDonut = a.filter { a => a.contains("size")}

我想要从单词大小(即使它更多到字符串,即数字)到下一次显示单词大小的新列表。

最好的方法是什么?

标签: scalalistfiltersublist

解决方案


您可以使用foldLeft或其符号版本/:

val newList = (List.empty[List[String]] /: a) {(agg, elem) =>
  if (elem startsWith "size ") List(elem) :: agg
  else agg match {
    case head :: tail => (elem :: head) :: tail
    case Nil => agg
  }
}

这将以相反的顺序为您提供内部和外部列表,如果您需要原始顺序,您可以这样做:

newList.map(_.reverse).reverse

推荐阅读