Доступ к 2D массиву с диапазоном в Swift - PullRequest
0 голосов
/ 01 апреля 2019

Когда я строю 2D-массив следующим образом и применяю flatMap с диапазоном, я получаю следующий результат:

var a = [["5", "3", ".", ".", "7", "."],["6",".",".","1","9","5"]]
print(a.flatMap{$0[1..<5]})

Выход:

["3", ".", ".", "7", ".", ".", "1", "9"]

Но если я хочу просто отобразить диапазон следующим образом, я получаю следующую ошибку.

print(a[1..<5])

Завершено сигналом 4

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Авария - это именно то, чего можно было ожидать.У a есть только два элемента, индексированных как 0 и 1. Применение большего индекса с помощью выражения a[1..<5] (запрашивая также элементы 2, 3 и 4) выводит вас из диапазона.

0 голосов
/ 01 апреля 2019

Если вы считаете элементы в диапазоне столбцами 2D-массива, вы можете получить их следующим образом:

let a = [["5", "3", ".", ".", "7", "."],
         ["6", ".", ".", "1", "9", "5"]]

func getColumns<T>(in range: Range<Int>, from array2d: [[T]]) -> [T] {
    return array2d.flatMap { $0[range] }
}

getColumns(in: 1..<5, from: a)  //["3", ".", ".", "7", ".", ".", "1", "9"]

Имейте в виду, что это может привести к ошибке Index вне диапазона , как и для любого другого массива.

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