如何在2D数组中查找元素的索引-Swift

时间:2019-08-02 04:12:40

标签: arrays swift tuples

我遇到了一个问题,因为我是Swift的新手,这让我很难受。如果有人能帮助我,我将非常感激。

我有一个二维的CellState数组:[[CellState]],我正在尝试查找.alive元素的所有索引。索引应以[[Int]]的形式返回,如下所示:

var cellStates = [ \\initial 2D array
                    [.dead, .alive, .alive], 
                    [.alive, .dead, .dead]
                 ] 
var coordinatesOfAliveCells = [ \\2D array that I need
                                 [0,1],
                                 [0,2],
                                 [1,0]
                              ] 

换句话说,获取cellStates 2D数组中每个.alive的坐标。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以枚举单元格状态并映射结果:

enum DeadOrAlive {
    case dead
    case alive
}
var cellStates: [[DeadOrAlive]] = [[.dead, .dead, .alive], [.alive, .dead, .dead], [.alive, .dead, .alive], [.dead, .dead]]
let indicesOfAliveCells = cellStates.enumerated()
    .map { top in top.element.enumerated()
        .filter { $0.element == .alive }
        .map { [top.offset, $0.offset] } }
    .filter { $0.count > 0 }
    .flatMap { $0 }
print(indicesOfAliveCells)

输出:

  

[[0,2],[1,0],[2,0],[2,2]]

这将返回在每个子数组中找到的.alive的每个实例的索引对。

答案 1 :(得分:0)

您可以使用map运算符来变换每个元素

let coordinateArray = coordinateTuples.map { [$0, $1] }