1

アイテムのリストの次の要素と前の要素に移動できるscalaコレクションのクラスを探しています。

例えば:

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

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

このAPIとgetNext/getPreviousの一定時間を持つScalaコレクションにクラスはありますか?

コードを書くことはできますが、すぐに使えるものがあるかどうかを確認したいと思いました。

4

2 に答える 2

1

要件に合わせて不変のコレクションが必要な場合はZipperscalazで確認できます。

ストリーム内のインデックス (フォーカス) 位置を追跡する、空でないジッパーのようなストリーム構造である、指定されたストリームを提供します。ストリーム内でフォーカスを前後に移動したり、フォーカスされた位置の前後に要素を挿入したり、フォーカスされたアイテムを削除したりできます。

すべての操作は一定時間です。ただし、定数は、オブジェクトの作成を伴うため、配列をラップするものから予想されるように大きくなります (要素の挿入/削除は許可されません)。

実装は、基本的に 2 つのリスト (ストリームなど) を持つことによって行われ、一方には前の逆の要素が保持されます。移動は、ヘッド要素をあるリストから別のリストにスワップすることによって行われます。

于 2012-05-20T08:40:19.277 に答える
0

をご覧くださいDoubleLinkedListprev前のアイテムを先頭にしたリストを表示するを追加します。

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 に答える