Путаница с кодом в Swift? #array #matrix - PullRequest
1 голос
/ 14 января 2020
struct Matrix {
  let rows: Int, columns: Int
  var grid: [Double]
  init(rows: Int, columns: Int) {
     self.rows = rows
     self.columns = columns
     grid = Array(repeating: 0.0, count: rows * columns)
  }
  subscript(row: Int, column: Int) -> Double {
     get {
        return grid[(row * columns) + column]
     }
     set {
        grid[(row * columns) + column] = newValue
     }
   }
  }

var m = Matrix(rows: 2, columns: 2)
m[0, 0] = 1.1
m[0, 1] = 2.1
print(m[0, 0])
  1. Мой вопрос заключается в том, чтобы получить и установить в сетке, что + colum означает, что сетка возвращает значение позиции массива в матрице. При удалении я удаляю столбец + из кода, он устанавливает значение в неправильной позиции. Так почему в сетке этого кода есть столбец +. Что он делает?

1 Ответ

3 голосов
/ 14 января 2020

Матрица n строки x m (двумерная) хранится в одномерном массиве с ( n * m ) элементов.

Например, представьте матрицу 4 x 3. Для этого потребуется линейный массив из 12 элементов. Он имеет следующие индексы в массиве:

    0     1     2

0   0  |  1  |  2      #rows = 4
    -------------      #columns = 3
1   3  |  4  |  5
    -------------      array position = (row * #columns) + column
2   6  |  7  |  8
    -------------
3   9  | 10  | 11

Если предположить, что индексы строки и столбца начинаются с 0, то для доступа к хранилищу для элемента в строке матрицы 3 (четвертая строка), столбец 2 ( третий столбец), вы должны использовать следующее: (3 * 3) + 2 = 11

Для строки 1 (2-й ряд), столбца 1 (2-й столбец): (1 * 3) + 1 = 4

Для строки 2, столбец 0: (2 * 3) + 0 = 6

Надеюсь, что поможет.

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