当我按如下方式构造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终止
答案 0 :(得分:2)
坠机正是人们所期望的。 a
只有两个元素,索引分别为0和1。通过说a[1..<5]
来应用更大的索引(也询问元素2、3和4)会使您超出范围。
答案 1 :(得分:0)
如果将范围内的元素视为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"]
请记住,这仍然可能像其他数组一样抛出索引超出范围错误。