В одной из моих первых попыток создания функционального кода я столкнулся с проблемой производительности.
Я начал с общей задачи - умножить элементы двух массивов и подвести итоги:
var first:Array[Float] ...
var second:Array[Float] ...
var sum=0f;
for (ix<-0 until first.length)
sum += first(ix) * second(ix);
Вот как я реформировал работу:
sum = first.zip(second).map{ case (a,b) => a*b }.reduceLeft(_+_)
Когда я сравнивал два подхода, второй метод занимает в 40 раз больше времени!
Почему второй метод занимает намного больше времени? Как я могу реформировать работу как с точки зрения скорости, так и с использованием функционального стиля программирования?