在Swift

时间:2019-04-01 02:42:17

标签: 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终止

2 个答案:

答案 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"]

请记住,这仍然可能像其他数组一样抛出索引超出范围错误。