как добавить элемент в список (list) scala
Первый день начинаю изучать scala. Есть задача: Написать функцию (рекурсию), которая возвращает новый список, в котором каждый элемент является суммой предыдущего элемента нового списка и текущего элемента входного списка. Пример: List(1, 4, 2) преобразуется в List(1, 5, 7)
val mylist = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
var sp1: List[Int] = Nil
def summation(list: List[Int]): List[Int] = {
if (list.isEmpty || list.tail.count(_ == 2) == 0){
sp1
}:List[Int]
else {
sp1 :+ (list.head + list.tail.head)
summation(list.tail)
}
}
summation(mylist)
В итоге функция summation() возвращает пустой лист. Подскажите, в чем ошибка?
Ответы (1 шт):
List - неизменяемая (immutable) коллекция, т.е. в неё нельзя добавлять и из неё удалять что-либо.
Вместо этого можно создать новый список с который будет содержать старый список плюс новый элемент.
Для создания списка с новым элементом в конце - оператор :+, в начале оператор +: либо более популярный ::.
val list = List(1, 2, 3)
val list2 = list :+ 9 // List(1, 2, 3, 9)
val list3 = 9 +: list // List(9, 1, 2, 3)
val list4 = 9 :: list // List(9, 1, 2, 3)
Работа с переменной (var) выглядит так:
var list = List(1, 2, 3)
list = list :+ 9 // List(1, 2, 3, 9)
// либо сокращённо
list :+= 9 // List(1, 2, 3, 9, 9)
И так, в твоём примере есть создание нового списка, но ни в какой переменной результат не сохранён:
sp1 = sp1 :+ (list.head + list.tail.head)
// либо
sp1 :+= (list.head + list.tail.head)
P.S. Рекомендую пользваться IDE - он может предупредить о неиспользуемом коде. Кроме того, в режиме отладки можно посмотреть как работает программа строка за строкой.