我正在寻找scala集合中的一个类,它允许我遍历项目列表的下一个和上一个元素。
例如:
val container = SomeClassFromScala(Int,Double,classOf[String],7)
container.getPreviousItem(Double) => Option[Int]
container.getNextItem(7) => None
Scala集合中是否有任何类具有此api和getNext / getPrevious的常量时间。
我可以编写代码,但我想知道是否有任何东西可以立即使用。
答案 0 :(得分:1)
如果您想拥有符合要求的不可变集合,可以查看scalaz中的Zipper
:
提供一个尖头流,这是一个跟踪索引(焦点)的非空拉链式流结构 在溪流中的位置。焦点可以通过流向前和向后移动,可以插入元素 在聚焦位置之前或之后,可以删除聚焦项目。
所有操作都是固定时间。虽然常量更大,就像人们对包装数组的东西所期望的那样(并且不允许插入/删除元素),因为它涉及对象创建。
实现基本上是通过两个列表(Streams,无论如何),其中一个包含前面的反向元素。通过将head元素从一个列表交换到另一个列表来完成移动。
答案 1 :(得分: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)
下行:这不是恒定的时间,而且是可变的。