2016-01-18 3 views
0

Я пытаюсь создать массив, в котором каждый элемент является пустым массивом. Я попытался это:Scala создать массив пустых массивов

var result = Array.fill[Array[Int]](Array.empty[Int]) 

Посмотрев здесь How to create and use a multi-dimensional array in Scala?, я попытался это:

var result = Array.ofDim[Array[Int]](Array.empty[Int]) 

Однако ни одна из этих работ.

Как создать массив пустых массивов?

ответ

6

Вы ошибаетесь Array.ofDim здесь. Он создает многомерный массив, учитывая размеры и тип сохраняемого значения.

Чтобы создать массив из 100 массивов, каждый из которых пуст (0 элементов) и будет содержать Int s, вам нужно указать только эти размеры в качестве параметров функции ofDim.

val result = Array.ofDim[Int](100, 0) 
+0

Как в стороне, я превратил 'result' в' val', так как я сильно сомневаюсь, что его нужно модифицировать (это подразумевало бы * полностью замену * массива массивов, а не просто модификацию содержимого суб-массив). –

4

Array.fill принимает два Params: Во-первых, длина, второе значение для заполнения массива с, точнее второй параметр является вычисление элемент, который будет вызываться несколько раз, чтобы получить элементы массива (спасибо на @ alexey-romanov для указания этого). Тем не менее, в вашем случае это всегда всегда совпадает с пустым массивом.

Array.fill[Array[Int]](length)(Array.empty) 
+2

Будьте осторожны: второй аргумент - это значение _not_, а _calculation_, которое производит значение и будет вызываться для каждого элемента. Пример, приведенный в документации, - это 'Array.fill (3) {math.random}', который дает 3 разных случайных значения. –

+0

Вы правы, спасибо! Я исправлю это. – lex82

1

Рассмотрим также Array.tabulate следующим образом,

val result = Array.tabulate(100)(_ => Array[Int]()) 

где функция лямбда применяется 100 раз и для каждого она обеспечивает пустой массив.

Смежные вопросы