如何在Swift中创建二维平面航点数组并实现遍历与访问?
在Swift中创建航点数组的最佳实践
嗨,我完全理解你习惯了VB里那种直接声明二维数组的简单方式,Swift虽然语法思路不同,但实现你要的功能其实很直观,甚至更灵活!下面给你两种可行的方案,优先推荐第一种,因为代码可读性和可维护性更好:
方案一:用自定义结构体(推荐)
首先我们可以定义一个Waypoint结构体来封装每个航点的x、y坐标,这样代码逻辑更清晰,也不容易搞混坐标顺序:
// 定义航点结构体 struct Waypoint { var x: Double var y: Double } // 创建航点数组 var waypoints: [Waypoint] = [] // 添加示例航点 waypoints.append(Waypoint(x: 2.3, y: 4.5)) waypoints.append(Waypoint(x: 3.1, y: 5.0)) // ... 依次添加剩下的81个航点即可
遍历修改指定范围的航点
注意Swift数组是从0开始索引的,所以你说的“第10至25个点”对应的索引是9到24,修改代码如下:
// 将第10到25个点的x坐标向右移动3(即x加3) for index in 9...24 { waypoints[index].x += 3.0 }
访问单个航点
同样,第42个点对应的索引是41,直接通过下标访问即可:
let targetWaypoint = waypoints[41] print("第42个点的坐标:x = \(targetWaypoint.x), y = \(targetWaypoint.y)")
方案二:使用二维数组(类似VB的方式)
如果你更倾向于和VB类似的二维数组写法,Swift也支持数组的数组,不过这种方式可读性稍差,容易记错x/y对应的索引位置:
// 创建二维数组,每个子数组存储[x, y] var waypoints2D: [[Double]] = [] // 添加示例航点 waypoints2D.append([2.3, 4.5]) waypoints2D.append([3.1, 5.0]) // ... 继续添加其他航点 // 修改第10到25个点的x坐标 for index in 9...24 { waypoints2D[index][0] += 3.0 // 0对应x,1对应y } // 访问第42个点的坐标 let x42 = waypoints2D[41][0] let y42 = waypoints2D[41][1]
小提示
优先选择结构体方案,因为它的语义更明确——你能直接通过.x、.y访问坐标,而不用去记哪个索引对应哪个值,后续维护代码也更方便。
内容的提问来源于stack exchange,提问作者Bathan
相关产品推荐
相关产品推荐

