Как заменить элемент по индексу неизменным списком.
например.
val list = 1 :: 2 ::3 :: 4 :: List()
list.replace(2, 5)
Как заменить элемент по индексу неизменным списком.
например.
val list = 1 :: 2 ::3 :: 4 :: List()
list.replace(2, 5)
В дополнение к тому, что было сказано ранее, вы можете использовать функцию patch
, которая заменяет подпоследовательности последовательности:
scala> val list = List(1, 2, 3, 4)
list: List[Int] = List(1, 2, 3, 4)
scala> list.patch(2, Seq(5), 1) // replaces one element of the initial sequence
res0: List[Int] = List(1, 2, 5, 4)
scala> list.patch(2, Seq(5), 2) // replaces two elements of the initial sequence
res1: List[Int] = List(1, 2, 5)
scala> list.patch(2, Seq(5), 0) // adds a new element
res2: List[Int] = List(1, 2, 5, 3, 4)
Если вы хотите заменить индекс 2, то
list.updated(2,5) // Gives 1 :: 2 :: 5 :: 4 :: Nil
Если вы хотите найти все места там, где есть 2, и вместо этого поместите 5,
list.map { case 2 => 5; case x => x } // 1 :: 5 :: 3 :: 4 :: Nil
В обоих случаях вы на самом деле не "заменяете", вы возвращаете новый список, который имеет разные элементы в этой (той) позиции (ей).
Вы можете использовать list.updated(2,5)
(который является методом на Seq
).
Вероятно, лучше использовать scala.collection.immutable.Vector
для этой цели, потому что обновления на Vector
принимают (я думаю) постоянное время.
Если вы выполняете много таких замен, лучше использовать класс muttable или Array.
Вы можете использовать карту для создания нового списка, например:
@ list
res20: List[Int] = List(1, 2, 3, 4, 4, 5, 4)
@ list.map(e => if(e==4) 0 else e)
res21: List[Int] = List(1, 2, 3, 0, 0, 5, 0)
Это также может быть достигнуто с использованием функции патча как
scala> var l = List(11,20,24,31,35)
l: List[Int] = List(11, 20, 24, 31, 35)
scala> l.patch(2,List(27),1)
res35: List[Int] = List(11, 20, 27, 31, 35)
где 2 - это позиция, в которой мы хотим добавить значение, List(27)
- это значение, которое мы добавляем в список, а 1 - количество элементов, подлежащих замене из исходного списка.