Ios 在Swift中提取二维数组的一部分

Ios 在Swift中提取二维数组的一部分,ios,arrays,swift,optimization,multidimensional-array,Ios,Arrays,Swift,Optimization,Multidimensional Array,我试图学习如何在Swift中处理二维数组。这是我正在研究的一个二维阵列: var Image = [[1,2,3],[4,5,6],[7,8,9]] 如果我只想提取前两行和第一列(2x2),我将如何使用Swift的range操作符(…)。我尝试了以下方法: let extractedImage = Image[0...1][0...1] 它不起作用。它给了我前两行和前两列的全部内容。如果不使用for循环,如何处理此问题 图像[0…1]返回[[1,2,3],[4,5,6]] 第二个[0…1]应

我试图学习如何在Swift中处理二维数组。这是我正在研究的一个二维阵列:

var Image = [[1,2,3],[4,5,6],[7,8,9]]
如果我只想提取前两行和第一列(2x2),我将如何使用Swift的range操作符(…)。我尝试了以下方法:

let extractedImage = Image[0...1][0...1]

它不起作用。它给了我前两行和前两列的全部内容。如果不使用for循环,如何处理此问题

图像[0…1]
返回
[[1,2,3],[4,5,6]]

第二个
[0…1]
应用于同一数组
[[1,2,3],[4,5,6]
,该数组获取前两个对象,它们仍然是
[1,2,3]
[4,5,6]

您要做的是将范围应用到每个数组,您可以使用map来执行这些操作

let extractedImage = Image[0...1].map({ $0[0...1] })

我不确定我是否完全理解了你的问题,但这里有一种更安全的方式获取
[[1,2],[4,5]]

var images = [[1,2,3],[4,5,6],[7,8,9]]
let result = images.prefix(2).map { Array($0.prefix(2)) }

print(result) // [[1, 2], [4, 5]]

图像[0…1]。映射{$0[0…1]。平面映射{$0}
:)

请解释您的答案是如何解决问题的,它将帮助每个人更清楚地理解您的解决方案,以供将来参考。
$0[0…1]
返回ArraySlice。如果没有
flatMap
(像Kevin提供的那样),它将是一个阵列片阵列
flatMap
帮助返回数组。另外,在Swift 5中,
flatMap
似乎已被弃用。我们应该改为使用
compactMap
。但有时这种方法会使我的预览崩溃。知道为什么吗?