умножить элементы массива scala
Всем привет, есть массив (типа вектор), мне нужно узнать длину вектора, для этого нужно каждую координату умножить саму на себя, затем все их записать в новый массив, а уже у нового массива посчитать сумму элементов и взять оттуда квадратный корень
Пытаюсь сделать по вот такому (вроде логичному) алгоритму, но в print элементы остаются теми же что были, в чем может быть проблема?
var vector = Array(2, 2, 5)
var i = 0
for(x <- vector){
var pr = x * x
vector(i) = pr
print(vector(i))
print(i)
i += 1
}
Ответы (1 шт):
Ни в чем. Все в массиве меняется - и принт выдает правильный нечитаемый (так как пишется в одно слово без разделителей) ответ
Ну раз уж поставлен тэг scala - не надо так делать. По возможности избегать использования var и мутабельных структур
Идем по описанию
- у нас есть вектор. Коллекция чисел
v - нам надо произвести действие над каждым элементом -
map(f)где f является функцией которая воплощает наше действие - надо возвести в квадрат -
math.pow(<что>, <в какую степень>) - надо почитать сумму элементов коллекций -
collection.sum - надо взять корень -
math.sqrt(<число>)
И соединяя все вместе получаем функцию:
def length(
v: Array[Int] // входной аргумент
): Double = // возвращаемый тип
math.sqrt( // корень
v.map( // совершаем действие с каждым элементом коллекции
math.pow(_, 2) // возведение в степень 2, подчеркивание
// является местом куда вставится текущий обрабатываемый
// элемент, эквивалентно записи `e => math.pow(e, 2)`
).sum // вычисляем сумму всех элементов
)