gpt4 book ai didi

scala - 寻求一种 Scala 风格的方法来迭代访问 "next"元素的列表

转载 作者:行者123 更新时间:2023-12-04 21:54:28 24 4
gpt4 key购买 nike

我正在研究一个 Polygon 类,该类在 Array[Vec2] 中包含一组顶点(Vec2 是一个定义 x 和 y 的简单 case 类)。

现在,我想实现一个函数来返回 Array[LineSegment] 中多边形的边缘。 (其中 LineSegment 又是一个定义开始和结束的简单案例类)。

解决方案是创建将每个顶点连接到数组中的下一个顶点的线段,最后将最后一个顶点连接到第一个顶点。

我只习惯于命令式编程,所以这是我的命令式方法:

def edges: Array[LineSegment] = {
val result = new Array[LineSegment](vertices.length)

for (i <- 0 to vertices.length - 2) {
result.update(i, LineSegment(vertices.apply(i), vertices.apply(i + 1)))
}
result.update(edges.length - 1, LineSegment(vertices.head, vertices.last))

result
}

这工作正常,但它很丑陋。我想在这里使用函数式编程的优势,但我有点坚持。

我的想法是把它像这样:
def edges: Array[LineSegment] = {
for (v <- vertices) yield
LineSegment(v, if (v == vertices.last) vertices.head else /* next? */)
}

问题在于,给定当前项 v,无法访问数组中的下一项。 .

我读过 sliding IterableLike 中定义的方法,但是这似乎是非旋转的,即它不会认为第一个项目在最后一个项目之后,因此不会返回它。

那么什么是好的“scala-esque”方法呢?

最佳答案

当然你可以用sliding :

(vertices :+ vertices.head) sliding 2

关于scala - 寻求一种 Scala 风格的方法来迭代访问 "next"元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com