如何将行/字符串列表制作为子列表

时间:2018-09-21 00:16:24

标签: scala list filter sublist

对不起,是否曾经有人问过我,但是我一直在寻找解决方案。

我有一个字符串列表;

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")

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

我已经弄清楚了如何使用该字符串;

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

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

最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

如果列表中有更多值,则可以使用数组来捕获它们。 看看下面的内容是否适合您。

scala> val a = List("size 34", "help","panne","size 35","kake", "test","size 34", "help", "panne","size 35", "kake", "test")
a: List[String] = List(size 34, help, panne, size 35, kake, test, size 34, help, panne, size 35, kake, test)

scala> val b = a.sliding(3,3).toList
b: List[List[String]] = List(List(size 34, help, panne), List(size 35, kake, test), List(size 34, help, panne), List(size 35, kake, test))

scala> b(0)
res1: List[String] = List(size 34, help, panne)

scala> b.length
res6: Int = 4

scala>