Как суммировать парные элементы индивидуально в Scala - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть следующий метод для суммирования парных элементов в массиве пар. Я новичок в scala и чувствую, что будет лучший способ, чем следующий фрагмент кода.

  def accumulate(results: Array[(Int, Int)]): (Int, Int) = {
    var x: Int = 0
    var y: Int = 0
    for (elem <- results) {
      x = x + elem._1
      y = y + elem._2
    }
    (x, y)
  }

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Да, вы можете использовать foldLeft.
(Кстати, я бы также использовал Список вместо Массив )

results.foldLeft((0, 0)) {
  case ((accX, accY), (x, y)) =>
    (accX + x, accY + y)
}
1 голос
/ 01 апреля 2020

Все операции в scala.collection.ArrayOps доступны в Array[T]. В частности, вы можете unzip массив пар в пару массивов

val (xs, ys) = results.unzip

Суммирование контейнера является стандартным использованием fold

val x = xs.fold(0)(_ + _)
val y = ys.fold(0)(_ + _)

И тогда вы можете вернуть пару значений

(x, y)

https://scalafiddle.io/sf/meEKv6T/0 имеет полный рабочий пример.

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