Swift-遍历数组[[Int]]的智能方法

时间:2019-04-07 18:25:55

标签: arrays swift loops

我使用数组[[Int]]的数组在地图中存储坐标。 例如,我想将所有的“ 2”替换为“ 1”。 为此,我创建了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
}

有没有一种方法可以只扫描数组的内容以替换数字?

例如 currentArray.findAndReplace(find:2,replace:1)或类似的东西,可以与[[Int]]使用吗?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

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指向内部数组元素的每个元素。