1

我正在 scala 集合中寻找一个类,它允许我遍历项目列表的下一个和上一个元素。

例如:

val container = SomeClassFromScala(Int,Double,classOf[String],7)

container.getPreviousItem(Double) => Option[Int]
container.getNextItem(7) => None

Scala 集合中是否有任何类具有此 api 和 getNext/getPrevious 的恒定时间。

我可以编写代码,但我想看看是否有什么可以立即使用。

4

2 回答 2

1

如果您想拥有一个符合您要求的不可变集合,您可以查看Zipperscalaz :

提供指向流,它是一种非空的类似拉链的流结构,用于跟踪流中的索引(焦点)位置。通过流可以前后移动焦点,可以在焦点位置之前或之后插入元素,可以删除焦点项。

所有操作都是常数时间。尽管常量比包装数组的东西所期望的要大(并且不允许插入/删除元素),因为它涉及对象创建。

实现基本上是通过有两个列表(流,等等),其中一个包含先前的反转元素。移动是通过将 head 元素从一个列表交换到另一个列表来完成的。

于 2012-05-20T08:40:19.277 回答
0

看看DoubleLinkedList。它添加了prev一个列表,它为您提供了一个列表,其中前一个项目作为其头部。

import collection.mutable.DoubleLinkedList
val a = DoubleLinkedList(1,2,3,4)
val b = a.next.next                 // DoubleLinkedList(3, 4)
val c = b.prev                      // DoubleLinkedList(2, 3, 4)

缺点:它不是恒定的时间,它是可变的。

于 2012-05-20T04:46:07.733 回答