Создать матрицу nXn со значениями, увеличивающими Swift - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь найти простой способ создания матрицы с самоинкрементными значениями, то есть, если массив 3х3, то он должен выглядеть так [[0,1,2], [3,4,5], [6,7,8]]

когда я делаю что-то вроде ниже, я могу получить все нули

var arr = Array(repeating: Array(repeating: 0, count: 3), count: 3)

Чтобы добиться, мне нужно пройтись по элементам и переназначить увеличенные значения. Вместо этого есть ли какой-нибудь быстрый подход, который я мог бы использовать, не используя цикл for?

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Возможный подход заключается в использовании map() в диапазоне строк и столбцов:

let nrows = 3 // Number of rows
let ncols = 3 // Number of columns
let matrix = (0..<nrows).map { row in (0..<ncols).map { col in ncols * row + col } }
print(matrix) // [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

Внешний (0..<nrows).map отображает каждый номер строки в массив («строку»), а внутренний (0..<ncols).map отображает каждый номер столбца в матрицу.

Немного «магии кортежей» вы можете назначить автоматически увеличивающиеся значения:

var entry = 0
let matrix = (0..<nrows).map { _ in (0..<ncols).map { _ in (entry, entry += 1).0 } }

но это не то, что я бы действительно рекомендовал.

0 голосов
/ 08 марта 2019

На Swift.org есть учебник Subscripts , демонстрирующий пример структуры Matrix, который мне действительно нравится

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