Arrays Swift-通过数组[[Int]]循环的智能方式

Arrays Swift-通过数组[[Int]]循环的智能方式,arrays,swift,loops,Arrays,Swift,Loops,我使用数组[[Int]]的数组在地图中存储坐标。 例如,我想用“1”替换所有“2”。 为此,我创建了2个For循环,用于定义数组空间并检查内容。 这不是很灵活,只适用于定义大小的数组 private func remove2fromArray(currentArray: [[Int]]) -> [[Int]] { var newArray : [[Int]] = currentArray for section in 0...14 { for row i

我使用数组[[Int]]的数组在地图中存储坐标。 例如,我想用“1”替换所有“2”。 为此,我创建了2个For循环,用于定义数组空间并检查内容。 这不是很灵活,只适用于定义大小的数组

private func remove2fromArray(currentArray: [[Int]]) -> [[Int]] {

    var newArray : [[Int]] = currentArray

    for section in 0...14 {
        for row in 0...19 {
            if newArray[section][row] == 2
            { newArray[section][row] = 1 }
        }
    }
    return newArray
}
有没有办法只扫描数组的内容来替换数字

e、 g。
currentArray.findAndReplace(find:2,replace:1)或类似的,与[[Int]]一起工作的?

您可以这样做:

let result = array.map { subarray in
    subarray.map { integer -> Int in
        if integer == 2 {
            return 1
        } else {
            return integer
        }
    }
}
甚至更短:

let result = array.map {
    $0.map { integer in
        return integer == 2 ? 1 : integer
    }
}
和一艘班轮:

let result = array.map { $0.map { $0 == 2 ? 1 : $0 } }
我将试着用简单的话来解释这里发生的事情:map的作用是它一个接一个地遍历数组元素,并在元素上应用函数

在我们的示例中,第一个映射迭代外部数组元素,因此这里的
$0
引用内部数组(一个接一个)


第二个映射迭代内部数组的元素。因此,内部映射中的
$0
引用内部数组元素的每个元素。

至少删除那些硬编码的范围。根据数组的实际大小创建循环。为什么要使用2d数组来存储坐标?这里的模型是什么?有一个
坐标
结构并只存储它们的平面数组不是更好吗?数组是“一个有序的随机访问集合”。对我来说,这听起来不像坐标。您最好创建一个更适合坐标的数据类型。它工作得非常好,因为我可以访问数组[section][row],我认为它定义了二维空间坐标。你的意思是:struct{x:Int;y:Int;value:Int}如果你能解释一下如何替换卡片编码的范围,这会很有帮助,因为我无法在数组中使用数组的计数。但我可能可以用下面的map函数来实现这一点。我想我需要通读一下手册,看看.map到底做了什么,或者你能解释一下各个参数吗?map返回一个数组,其中单个内容由$0表示,并由后面的函数修改。在哪里可以了解带“?”和“:”的短函数?我更新了我的答案来解释发生了什么。如果你需要更多的解释,请让我知道。谢谢!