Questo è il problema che ho risolto, tuttavia essendo un imperativo di Scala noob totale, sento di aver trovato qualcosa di totalmente non elegante. Qualche idea di miglioramento apprezzabile.Scala inserire nell'elenco in posizioni specifiche
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)
pensavo soluzione più elegante sarebbe realizzabile con qualcosa di simile, ma questa è solo pura speculazione.
var final:List[Any] = (0 /: indexes) {(final, i) => final ::: ins ::: l1.slice(i, indexes(i))
Opera d'arte;) Che cosa significa la prima [A]? Cosa significa? – Murgh
Il primo '[A]' significa che si tratta di un metodo generico (funziona su alcuni tipi 'A', i successivi' A' si riferiscono a quello stesso). '_' significa" qualunque sia la variabile "; è una scorciatoia per 'x => x == 4'. –
'xs.map (..). Flatten' può essere scritto come' xs.flatMap (..) '. – Landei