Невозможно обновить массив внутри функции отображения списка. Scala Программирование - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь обновить тип Array[Array[String]], когда в списке вызывается функция карты.

var m : Array[Array[String]] = Array(Array(""))
var n : List((String, Double))
n contains 100 elements
i want to update m foreach element in n like
n.map(x => {
   m :+ Array("a","b","c");
   x
})

но я заканчиваю с пустым массивом. Значения не добавляются к m. Я хочу попробовать это и для RDD.

1 Ответ

0 голосов
/ 17 ноября 2018

Во-первых, идея map состоит в том, чтобы преобразовать коллекцию, для которой вызывается карта, не изменяя другую коллекцию - foreach было бы лучше.

Во-вторых, причина, по которой вы получаете пустой массив, заключается в том, что :+ создает копию с добавленным элементом, но не изменяет исходный массив - scaladoc .

В-третьих, массивы не являются лучшими коллекциями для инкрементного построения, потому что неэффективно изменять их размеры, вы можете сначала создать большой массив, а затем обновить каждую позицию по индексу (однако, это было бы очень важно) , или вы можете использовать ArrayBuffer scaladoc , или вы можете отобразить список и получить List[Array[A]] или List[List[A]] (что был бы самый функциональный способ сделать это) .

В-четвертых, что именно вы имеете в виду, когда используете его, а также RDD ... если вы хотите построить массив с помощью итерации RDD, это концептуально неправильно. Или, если вы хотите создать RDD путем итерации List, это тоже концептуально неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...