具有next和previous方法的scala集合容器

时间:2012-05-20 04:43:26

标签: scala

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

例如:

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

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

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

我可以编写代码,但我想知道是否有任何东西可以立即使用。

2 个答案:

答案 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)

下行:这不是恒定的时间,而且是可变的。