scala で、ソートされたマップ、ツリー、またはリストが与えられた場合、存在しないキーの次に大きな値を返す最も効率的な方法は何ですか? さらに、この要素から始まる「イテレータ/カーソル」を取得することは可能ですか?
編集:
「実行時間」、「メモリ使用量」、「明快さ」、「実装と保守に必要な最小限のプログラマー時間」など、「効率的に」の解釈に満足しています (Kevin Wright 氏に感謝)。
scala で、ソートされたマップ、ツリー、またはリストが与えられた場合、存在しないキーの次に大きな値を返す最も効率的な方法は何ですか? さらに、この要素から始まる「イテレータ/カーソル」を取得することは可能ですか?
編集:
「実行時間」、「メモリ使用量」、「明快さ」、「実装と保守に必要な最小限のプログラマー時間」など、「効率的に」の解釈に満足しています (Kevin Wright 氏に感謝)。
を使用する場合はSortedMap
、それを呼び出すことができますrange
。そうですね。後でマップに要素を追加または削除する予定がある場合は、2.8.1 まで分割されます。これらの操作を回避すれば問題ないはずで、今後の Scala バージョンでも修正されています。
「効率的に」の定義は、「プログラマーの実装と保守にかかる時間を最小限に抑える」ことです...
シーケンスの場合:
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