이것은 내가 해결 한 문제입니다. 그러나 모든 필수 스칼라 놈입니다. 완전히 우아하지 않은 것을 발견했습니다. 개선에 대한 아이디어는 높이 평가됩니다.특정 위치의 목록에 스칼라 삽입
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)
나는 더 우아한 해결책이 이와 같은 것으로 달성 될 수 있다고 생각했지만, 그것은 순수한 추측 일뿐입니다.
var final:List[Any] = (0 /: indexes) {(final, i) => final ::: ins ::: l1.slice(i, indexes(i))
작품 : 첫 번째 [A]는 무엇을 의미합니까? 무슨 뜻이야? – Murgh
첫 번째'[A]'는 일반적인 방법이라는 것을 의미합니다 (어떤 유형은'A'에서 작동하고, 나중에 나오는'A '는 같은 것을 참조하고 있습니다). '_'은 "변수가 무엇이든간에"을 의미합니다. 그것은'x => x == 4'에 대한 지름길입니다. –
'xs.map (..). flatten'은'xs.flatMap (..)'으로 쓰여질 수 있습니다. – Landei