Есть ли способ заполнить многомерный массив, используя класс Range Scala - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу создать двумерный массив в Scala.Этот массив разбивает двумерное пространство на N блоков.Каждый элемент этого массива имеет значения minX, maxX, minY и maxY и индекс (от 0 до N ^ 2-1).

Например, если N = 8, я хочу создать индексы от 0 до 63, и каждый индекс соответствует диапазону в пространстве.Если у меня есть minX, maxX, minY, maxY всего пространства, есть ли способ использовать класс Range Scala для предоставления значения шага в измерениях x и y и создания этого массива с индексами и отдельными диапазонами?

Это класс и функция, которую я создаю:

class Grid (index: Int, minX: Double, minY: Double, maxX: Double, maxY: Double){
  def buildgrid(spaceminX: Double, spaceminY: Double, spacemaxX: Double, spacemaxY: Double,num_partitions:Int): Unit =
  {
    val stepX=spacemaxX-spaceminX/num_partitions
    val stepY=spacemaxY-spaceminY/num_partitions
    ???

  }}

Здесь переменные с префиксом пробела являются значениями для всего пространства, которое необходимо разделить на N блоков.Я застрял в том, как создать массив в функции.Ожидаемый вывод этого массива: Array [(0, minX, maxX, minY, maxY), (1, minX, maxX, minY, maxY) ..., (63, minX, maxX, minY, maxY)]

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете использовать для понимания:

object Example {

  def main(args: Array[String]): Unit = {
    /*
     X 0  1  2  3
    Y+--+--+--+--+
    0| 0| 1| 2| 3|
    1| 4| 5| 6| 7|
    2| 8| 9|10|11|
    3|12|13|14|15|
     +--+--+--+--+
    */

    val minX = 0
    val maxX = 3
    val minY = 0
    val maxY = 3

    val list = (for {
      y <- 0 to maxY-minY
      x <- 0 to maxX-minX
    } yield (y * (maxX-minX+1) + x, minX, maxX, minY, maxY)).toList

    println(list)
  }

}
0 голосов
/ 21 декабря 2018

Все коллекции (включая Array) имеют одно измерение и индексируются с 0.Для 2D Array вам нужно либо самостоятельно вычислить индекс, либо использовать вложенный массив Array[Array], и вам придется иметь дело со смещением min_ с помощью любого из вариантов.

В библиотеке есть поддержкадля создания вложенных Array с.Вы можете заполнить 2D-массив фиксированным значением, используя Array.fill:

val array = Array.fill(n1, n2)(value)

Или вы можете заполнить вычисленное значение для каждой координаты, используя tabulate:

val array = Array.tabulate(n1, 22){ case (a, b) => func(a, b) }

Примечание: Array.fill будет вычислять value для каждого элемента Array, поэтому убедитесь, что вы передаете значение, а не выражение.

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