Как перебрать массив без for в Scala? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть RDD[(BreezeMatrix[Double], Array[Int])], и я хочу удалить столбцы Matrix, которые находятся в array.

Например, если Array[1, 3, 4], я хочу удалить 1, 3, 4 столбцаиз Matrix.

Мой код:

 val  viol = rdd.map(x =>  for (p <- x._2) {val c = x._1.delete(p, Axis._0)})

Но для начала я получаю Unit в качестве типа возврата, даже если я возвращаю матрицу.Кроме того, мне было интересно, есть ли более функциональный способ сделать это в Scala.

1 Ответ

0 голосов
/ 10 сентября 2018

Более функциональный способ - перебирать массив индексов для удаления с накоплением состояния между шагами итерации. Вы можете использовать foldLeft для этой цели. foldLeft работает над коллекцией элементов, в вашем случае массив индексов для удаления:

rdd.map{
  case (matrix, toDelete) => 
    toDelete.foldLeft(matrix){case (acc, index) => acc.delete(index, Axis._0)}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...