我对 Swift 和一般编程还比较陌生。
我正在开展一个项目,该项目使用二维数组来表示我存储自定义对象的网格:
class Grid {
var element: [[GridElement]]
}
我经常需要通过坐标访问元素。例如:
let gridElement = grid.element[coord.x][coord.y]
但是 我还需要经常从给定的 gridElement(它在 2d 数组中的索引)中获取坐标。这导致嵌套循环似乎不是最快或最优雅的解决方案:
func getCoord(_ gridElement: GridElement) -> Coord {
for x in 0..<xSize {
for y in 0..<ySize {
if element[x][y] == gridElement { return Coord(x: x, y: y) }
}
}
return Coord(x: -1, y: -1)
}
因为我希望它能顺利处理大型网格,所以这看起来不像是解决方案。我错过了一些简单的东西吗?
我正在考虑将坐标存储在 GridElement 对象本身中,但这也感觉像是糟糕的设计,因为当 GridElement 改变位置时我需要不断更新它。
这更像是一个设计/架构问题,而不是寻找一个神奇的功能来解决我的问题。感觉应该建立双向引用的设计模式,但我还没有找到答案。有什么建议吗?
最佳答案
我认为您的 getCoord
函数应该是这样的:
func getCoord(_ gridElement: GridElement) -> Coord {
for (i, row) in element.enumerated() {
if let index = row.firstIndex(of: gridElement) {
return Coord(x: i, y: index)
}
}
return Coord(x: -1, y: -1)
}
关于arrays - 查找数组元素索引的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55177047/