Учитывая последовательность Scala ...Collapse подпоследовательность согласующих элементов в последовательности Scala
val sequence: Seq = List(3, 1, 4, 1, 5, 9, 2, 6, 5)
... сказать, что я хочу, чтобы найти все подпоследовательности соответствия определенных критериев, например, Струны нечетных чисел, и заменить тех, кто в результате какой-либо операции по этой подпоследовательности, скажем, его длину, создавая новую последовательность:
val sequence2: Seq = List(2, 4, 3, 2, 6, 1)
(Да, это довольно надуманный пример, но лаконичным.)
до сих пор лучшее, что я был в состоянии сделать это некрасиво императив хак:
val sequence: Seq[Int] = List(3, 1, 4, 1, 5, 9, 2, 6, 5)
var sequence2 = List[Int]() // this is going to be our result
var subsequence = List[Int]()
for (s <- sequence) {
if (s % 2 == 0) {
if (!subsequence.isEmpty) {
sequence2 = sequence2 :+ subsequence.length
subsequence = List[Int]()
}
sequence2 = sequence2 :+ s
} else {
subsequence = subsequence :+ s
}
}
if (!subsequence.isEmpty) {
sequence2 = sequence2 :+ subsequence.length
}
есть элегантный (/ функциональный) способ сделать это?
Это дает мне «Список (2, 1, 0, 1, 3, 2, 2, 1, 1)». Я думаю, что «все подпоследовательности» более комбинаторны, чем то, что мне нужно. –
Я полностью не понял ваш вопрос. Я получаю это сейчас. Дай мне минуту. –