Đây là vấn đề mà tôi đã giải quyết, tuy nhiên là một Scala noob cấp bách, tôi cảm thấy tôi đã tìm thấy một thứ hoàn toàn không thanh lịch. Bất kỳ ý tưởng cải tiến nào được đánh giá cao.Scala chèn vào danh sách tại các địa điểm cụ thể
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)
Tôi đã nghĩ rằng giải pháp thanh lịch hơn sẽ đạt được với một cái gì đó như thế này, nhưng đó chỉ là suy đoán thuần túy.
var final:List[Any] = (0 /: indexes) {(final, i) => final ::: ins ::: l1.slice(i, indexes(i))
Tác phẩm nghệ thuật;) Ý nghĩa đầu tiên [A] là gì? Nghĩa là gì? – Murgh
Đầu tiên '[A]' có nghĩa rằng nó là một phương thức chung (nó hoạt động trên một số loại 'A'; sau này' A 'đang đề cập đến cùng một). '_' có nghĩa là" bất kỳ biến nào là "; đó là một phím tắt cho 'x => x == 4'. –
'xs.map (..). Flatten' có thể được viết dưới dạng' xs.flatMap (..) '. – Landei