Функциональный, лаконичный и общий
Наиболее общий функциональный способ инициализации массивов, вероятно, будет tabulate
:
Array.tabulate(100)(_ + 1)
Здесь первый аргумент - это размер массива,и второй аргумент - это функция, которая отображает индексы на значения.
Обязательное условие: громоздкое, но очень быстрое
Если вы хотите сделать это как можно быстрее, используя один поток,тогда следующий императивный код, вероятно, будет трудно превзойти, потому что он нигде не использует функции более высокого порядка:
val N = 100
val a = new Array[Int](N)
var i = 0
while (i < N) {
a(i) = i + 1
i += 1
}
Он также имеет то преимущество, что у вас есть контроль над массивом, так что вы не 'Вы должны выделить любую новую память, если у вас уже есть выделенный массив.
С параллельными коллекциями
Если инициализация будет менее тривиальной (не просто увеличить целое число), следующеераспараллеленная версия может работать быстрее для очень больших N
:
val arr = new Array[Int](N)
for (i <- (0 until N).par) {
arr(i) = i + 1
}
Быстро и грязно (и, вероятно, так же быстро, как и императив vв любом случае)
Как уже упоминалось в комментарии, в этом простом случае
(1 to 100).toArray
было бы достаточно.