在scala中,给定一个有序的映射,树或列表,返回下一个较大的不存在键值的最有效方法是什么?另外,是否可以从此元素开始获取“迭代器/光标”?
修改
我对“有效”的任何解释感到满意,例如: “运行时”,“内存使用”,“清晰度”或“尽可能少的程序员时间来实现和维护”(感谢Kevin Wright)。
答案 0 :(得分:2)
将“高效”定义为“尽可能少的程序员时间来实施和维护”......
对于序列:
val s = Seq(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41)
val overSixteen = s dropWhile (_ < 16)
对于地图:
val s = Map(2->"a", 3->"b", 5->"c", 7->"d", 11->"e", 13->"f")
val overSix = s dropWhile (_._1 < 6)
如果您更喜欢Iterator,只需在生成的集合上调用.iterator
,或者如果您对.view
特别感兴趣,可以在 dropWhile
之前使用{{1}} 懒惰的行为。
答案 1 :(得分:2)
如果您使用SortedMap
,则可以在其上调用range
。好吧,有点。如果您计划之后添加和/或删除地图中的元素,则会将其分解为2.8.1。如果您避免这些操作应该没问题,并且它也已针对即将推出的Scala版本修复。