Este es el problema que he resuelto, sin embargo, siendo un total novato de Scala, siento que encontré algo totalmente no elegante. Cualquier idea de mejora apreciada.Scala inserta en la lista en ubicaciones específicas
val l1 = 4 :: 1 :: 2 :: 3 :: 4 :: Nil // original list
val insert = List(88,99) // list I want to insert on certain places
// method that finds all indexes of a particular element in a particular list
def indexesOf(element:Any, inList:List[Any]) = {
var indexes = List[Int]()
for(i <- 0 until inList.length) {
if(inList(i) == element) indexes = indexes :+ i
}
indexes
}
var indexes = indexesOf(4, l1) // get indexes where 4 appears in the original list
println(indexes)
var result = List[Any]()
// iterate through indexes and insert in front
for(i <- 0 until indexes.length) {
var prev = if(i == 0) 0 else indexes(i-1)
result = result ::: l1.slice(prev, indexes(i)) ::: insert
}
result = result ::: l1.drop(indexes.last) // append the last bit from original list
println(result)
Estaba pensando solución más elegante sería alcanzable con algo como esto, pero eso es sólo especulación pura.
var final:List[Any] = (0 /: indexes) {(final, i) => final ::: ins ::: l1.slice(i, indexes(i))
Obra de arte;) ¿Qué significa la primera [A]? ¿Que significa? – Murgh
El primer '[A]' significa que es un método genérico (funciona en algún tipo 'A'; los últimos 'A' se refieren a ese mismo). '_' significa" cualquiera que sea la variable "; es un atajo para 'x => x == 4'. –
'xs.map (..). Flatten' se puede escribir como' xs.flatMap (..) '. – Landei