【发布时间】:2014-02-18 18:57:45
【问题描述】:
我需要有效地循环一个固定的序列,从它的任何一个元素开始,而不是总是从头开始。
我一直在探索的解决方案是:
val directions = List("north", "east", "south", "west")
val cycle = Stream.continually(directions).flatten
cycle dropWhile (_ != "south") take 12 foreach println
由于我在热循环中使用它,一遍又一遍地开始,而且实际序列相当长,我担心dropWhile 会花费我不少钱。
有什么办法可以加快速度吗?
我的做法是否正确?
编辑
给出了一些好的答案,建议我不应该使用Streams。现在的中心问题变成了:如何避免使用dropWhile 或类似功能?
【问题讨论】:
-
该列表是在程序运行时动态生成的输入还是固定列表?完成
dropWhile后,您不能重复使用对Stream的相同引用吗?是什么阻止了这种情况? -
任务开始时列表内容固定。基本上,我必须浏览可能的关系列表(例如
HunterHunted),搜索具有给定属性的第一个元素。一旦找到,我将反转关系 (HuntedHunter) 并从下一个开始......所以我可以重复使用相同的Stream,但我必须一次又一次地使用dropWhile。跨度>