Как сделать список строк / строк в подсписки - PullRequest
0 голосов
/ 21 сентября 2018

Извините, если раньше об этом спрашивали, но я всегда искал решение.

У меня есть список строк;

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 голосов
/ 21 сентября 2018

Если у вас есть больше значений в списке, вы можете использовать массивы для их захвата.Посмотрите, подходит ли вам следующее.

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>
0 голосов
/ 21 сентября 2018

Вы можете использовать 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
...