2

scala で、ソートされたマップ、ツリー、またはリストが与えられた場合、存在しないキーの次に大きな値を返す最も効率的な方法は何ですか? さらに、この要素から始まる「イテレータ/カーソル」を取得することは可能ですか?

編集:

「実行時間」、「メモリ使用量」、「明快さ」、「実装と保守に必要な最小限のプログラマー時間」など、「効率的に」の解釈に満足しています (Kevin Wright 氏に感謝)。

4

2 に答える 2

2

を使用する場合はSortedMap、それを呼び出すことができますrange。そうですね。後でマップに要素を追加または削除する予定がある場合は、2.8.1 まで分割されます。これらの操作を回避すれば問題ないはずで、今後の Scala バージョンでも修正されています。

于 2010-12-09T10:59:13.570 に答える
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 beforeを使用できます。 dropWhile

于 2010-12-09T09:27:05.597 に答える