#swift
#swift
Вопрос:
Когда я создаю 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
Комментарии:
1. И в чем вопрос?
2. Интересно, почему я получаю сбой?
3. Это потому, что это не имеет смысла. У вас есть только два массива строк, включенных в a.
4. Было бы разумнее, если бы вы написали что-то вроде[0][1..<5].
5. да, вы получаете ошибку. у вас есть 2 элемента в вашем корневом массиве, поэтому вы не можете
print(a[1..<5])
, потому что элемента недостаточно.
Ответ №1:
Сбой — это именно то, чего следовало ожидать. a
содержит всего два элемента, проиндексированных как 0 и 1. Применение большего индекса путем указания a[1..<5]
(запрашивая также элементы 2, 3 и 4) выводит вас за пределы диапазона.
Ответ №2:
Если вы думаете об элементах в диапазоне как о столбцах 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 out of range, как и в случае с любым другим массивом.
Комментарии:
1. Что случилось с вашим вопросом в CR?
2. Я понял из вашего вопроса, что я мог бы вернуть его обратно. И это снова. Спасибо за заботу!
3. Этот код не выполняет то, что было задано в этом вопросе. Операционная система хочет получить
["3", ".", ".", "7", ".", ".", "1", "9"]
от1..<5
. Такое ощущение, что вы ответили на другой вопрос.4. @Rob вот так, мой ответ сел на диету