arrays - Swift - 循环数组数组的智能方法 [[Int]]

标签 arrays swift loops

我使用数组 [[Int]] 的数组来存储 map 中的坐标。 例如,我想用“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
}

有没有办法只扫描数组的内容来替换数字?

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

关于arrays - Swift - 循环数组数组的智能方法 [[Int]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55562308/

相关文章:

javascript - 有没有更优雅的方式来写这些条件?

通过 Objective-C 消息传递访问 C 风格对象数组的正确语法?

iOS Swift dequeueReusableCellWithIdentifier 导致重叠

Javascript将多个对象插入一个空对象

swift - 我尝试使用 UserDefaults 每次打开时都不会将分数重置为零,但它不起作用

IOS Swift CollectionView 如何在索引上设置正确的背景颜色

JavaScript(firebase): how can the firebase database key of a clicked item be obtained?

java - 带有 switch 语句的基本数组

java - 在 O(1) 空间和 O(n) 时间中重新排序的 boolean 数组

php - @$array ['possibly_missing_key' ] 是反模式吗?