[解決済み] ストリームとビューとイテレータ
質問
scalaのStreams, View (SeqView), Iteratorの違いは何ですか?これは私の理解です。
- これらはすべて遅延リストです。
- ストリームは値をキャッシュします。
- イテレータは一度しか使えないのですか?最初に戻ってもう一度値を評価することはできないのですか?
- Viewの値はキャッシュされないが、何度でも評価できる?
つまり、ヒープスペースを節約したい場合、イテレータ(リストを再びトラバースしない場合)またはビューを使用する必要がありますか?ありがとうございます。
どのように解決するのですか?
まず、それらはすべて 非厳格 . これは関数に関連した特定の数学的な意味を持ちますが、基本的には事前に計算するのではなく、オンデマンドで計算されることを意味します。
Stream
はまさに遅延リストです。実際、Scalaでは
Stream
は
List
であり、その
tail
は
lazy val
. 一度計算された値は計算されたままになり、再利用されます。あるいは、あなたが言うように、値はキャッシュされます。
An
Iterator
は一度しか使えません。
トラバーサルポインタ
であり,それ自体がコレクションではないからです.Scalaで特別なのは、以下のような変換を適用できることです。
map
と
filter
を取得し、単に新しい
Iterator
を取得し、次の要素を要求したときだけこれらの変換を適用します。
Scala はリセット可能なイテレータを提供していましたが、一般的な方法でサポートするのは非常に難しく、バージョン 2.8.0 を作成しませんでした。
ビューはデータベースのビューと同じように見ることができます。それは、コレクションに適用して "仮想" コレクションを生成する、一連の変換です。あなたが言ったように、すべての変換は、そこから要素をフェッチする必要があるたびに再適用されます。
両方とも
Iterator
もビューも優れたメモリ特性を持っています。
Stream
は良いものですが、Scalaでは、その主な利点は無限列(特に再帰的に定義された列)を書くことです。1つの
は
を全て保持することを避けることができます.
Stream
への参照を保持しないようにすることで、すべての head
への参照を保持しないようにすることです (例えば
def
の代わりに
val
を定義するために
Stream
).
ビューによって発生するペナルティのため、通常は
force
を適用するか、あるいは、ビューの総サイズと比較して、フェッチされる要素が少ないと予想される場合には、ビューとしてそれを維持する必要があります。
関連
-
[解決済み] Scalaでループから抜け出すにはどうしたらいいですか?
-
[解決済み] AWSのためのScala SDKまたはインターフェースはありますか?
-
[解決済み] 実行時に変数の型を取得したい
-
[解決済み] 理解する `andThen`
-
[解決済み] Scala vs. Groovy vs. Clojure [終了しました]。
-
[解決済み] Scalaのapply関数とは何ですか?
-
[解決済み】タスクがシリアライズされない:オブジェクトではなくクラスに対してのみクロージャの外で関数を呼び出すとjava.io.NotSerializableExceptionが発生する
-
[解決済み】case objectとobjectの違いについて
-
[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
-
[解決済み】Scala 2.8における<:<、<%<、=:=の意味と、それらのドキュメントはどこにあるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Scala subString関数
-
[解決済み] expr() での lit() の使用について
-
[解決済み] AWSのためのScala SDKまたはインターフェースはありますか?
-
[解決済み] Scalaの変数の表示形式
-
[解決済み] sbtのlibraryDependenciesで言うところの++=と+=の違いは何ですか?
-
[解決済み] Scala : valへの再割り当て [重複].
-
[解決済み] Scalaのリターン
-
[解決済み】Scalaのウェブフレームワークは何がありますか?[クローズド]
-
[解決済み】Scala 2.8における<:<、<%<、=:=の意味と、それらのドキュメントはどこにあるのか?
-
[解決済み] Build.scala、%および%%の記号の意味