問題タブ [enumerator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Ruby列挙子ベースのレイジーフラット化メソッド
Michael Harrisonは、Rubyの怠惰な列挙子lazy_select
に関するすばらしい投稿をしており、との実装を提供していlazy_map
ます。次のの実装には、タイプlazy_flatten
以外の特別な処理が必要かどうか疑問に思っています。Enumerator
Enumerable
scala - さまざまな境界に沿って列挙子をチャンクする列挙子を作成する方法
そのため、Play2.0 Enumeratee ページ&>
には、 orthrough
メソッドを使用して を に変更する例が示さEnumerator[String]
れていEnumerator[Int]
ます。
Enumeratee.grouped
個々の要素からチャンクの列挙子を作成する列挙型もあります。それはうまくいったようです。
しかし、私が見ているのは、通常の入力は( andArray[Byte]
によって返される) の形式になるということです。それを念頭に置いて、これらの入力を取得して、たとえば、各文字列が行である(で終わる)に変換したいと思います。通常、線と要素の境界は一致しません。チャンク配列をチャンク文字列に変換できる列挙子を作成するにはどうすればよいですか?Enumerator.fromFile
Enumerator.fromStream
Array[Byte]
Enumerator[String]
'\n'
Array[Byte]
目的は、これらの行が利用可能になるたびにブラウザにチャンクバックしArray[Byte]
、次の入力チャンクが来るまで完全な行の一部ではなかった残りのバイトを保持することです。
理想的には、 aniter: Iteratee[Array[Byte], T]
と anを指定すると、 T 要素が によって解析されたEnumerator[Array[Byte]]
an が返されるメソッドが欲しいです。Enumerator[T]
iter
追加情報: コードをクリーンアップする時間が少しありました。ここに、私がやろうとしていることの具体的な例を示します。次の行を検出する次の反復があります。
そして、私がやりたいことは次のようなものです:
c# - foreach 次のアイテムを取得
私は次の機能を持っていますが、それは非常に長く、汚れていて、最適化したいです:
これは非常にうまく機能していますが、非常に汚れています。次のようなものを使用したいです。
リスト内の次のアイテムを毎回取得するように get_item 関数を作成するにはどうすればよいですか?
GetEnumerator について何か読んだことがありますが、これが問題の解決策なのか、それとも使用方法なのかわかりません。
ruby - なぜ列挙子を返すのですか?
配列が当然の選択であると思われるものに対して、なぜ ruby が配列ではなく列挙子を返すのか、私は興味があります。例えば:
ほとんどの人は、文字列を文字の配列と考えています。
では、なぜ String#chars は配列ではなく Enumerable を返すのでしょうか? 誰かがこれについて多くのことを考えて、列挙子の方が適切であると判断したと思いますが、その理由はわかりません。
ruby - 列挙子(外部イテレータ)の一部を反復処理しますか?
配列の一部が必要な場合は、[]
orを使用できsplit
ます。
しかし、の「一般的な」バージョンはあり[]
ますか? どんなものにも適用できますEnumerator
か?
もちろん、arr[1..3]
直接使用することもできます。しかし、列挙子を処理する一般的な方法を探しています。
scala - Scala: Enumerator[T] の一部のデータを読み取り、残りの Enumerator[T] を返す
Iteratees と Enumerator を使用する playframework の非同期 I/O ライブラリを使用しています。これで、データ シンクとして Iterator[T] が作成されました (簡単にするために、内容をファイルに格納する Iterator[Byte] とします)。この Iterator[Byte] は、書き込みを処理する関数に渡されます。
しかし、書き込みの前に、ファイルの先頭にいくつかの統計情報を追加したいので (簡単にするために 1 バイトとします)、書き込み関数に渡す前に次の方法でイテレータを転送します。
保存されたファイルをディスクから読み取ると、そのファイルの Enumerator[Byte] が取得されます。最初に、追加のデータを読み取って削除し、残りの Enumerator[Byte] を読み取りを処理する関数に渡したいと考えています。したがって、列挙子も変換する必要があります。
しかし、これを行う方法がわかりません。Enumerator からいくつかのバイトを読み取り、残りの Enumerator を取得するにはどうすればよいですか?
Iteratee[Byte] を OutputStream に、Enumerator[Byte] を InputStream に置き換えると、これは非常に簡単になります。
しかし、play フレームワークの非同期 I/O が必要です。
scala - Scala:enumerateeを適用した後に元のiterateeを取得する(playドキュメントの例はコンパイルされません)
列挙子をイテラティーに適用し、その後元のイテラティーを元に戻したいので、さらに適用することができます。Iteratee [Int、Int]を使用して入力を要約する例がPlayドキュメントにあります(http://www.playframework.org/documentation/2.0.1/Enumeratees)。次に、「3」や「6」などの文字列を入力として使用できるEnumeratee [String、Int]を使用します。例は次のとおりです。
ただし、列挙子。>>>は、反復子ではなく、パラメーターとして別の列挙子を使用するため、これはコンパイルされません。代わりに|>>を使用して試しました:
ただし、この例では「28」ではなく「10」が出力されます。適合されたイテラティーに追加されたパーツのみを考慮しているようです。
列挙子を使用するときに元のイテラティーを元に戻すにはどうすればよいですか?
scala - Scala/Play: ストリームの前に値を追加する Enumeratee を書く
1 つの Input.El を iteratee にプッシュし、残りの iteratee を返す enumeratee を書きたいと思います。ストリームに値を追加するだけでストリームを変更するため、私はこれを prepend と呼んでいます。これが私の試みです:
私が今それを呼び出すとき
先頭に追加する必要がある 0 のみを出力します。列挙子からの他の値は無視されます。enumeratee (transform メソッド) の &> メソッドもオーバーライドすると、動作させることができます。
しかし、applyOn メソッドがまだ無効であるため、これはあまりクリーンな方法ではありません。applyOn メソッドの意味を間違えたようです。私の意見では、元の iteratee を返す iteratee を返す必要があり、入力は元の iteratee で続行されます。
上記の transform メソッドは、enumeratee にどのような動作が必要かを説明する必要があります。transform の代わりに applyOn を上書きして、この動作を実現するにはどうすればよいですか?
ruby - Rubyの列挙子オブジェクトは内部イテレータを介して外部でどのように反復しますか?
Rubyのドキュメントによると、またはメソッドeach
にターゲットメソッドが提供されていない場合、Enumeratorオブジェクトはメソッドを(列挙するために)使用します。それでは、例として、次のモンキーパッチとその列挙子を取り上げましょう。to_enum
enum_for
Enumeratorオブジェクトがeach
メソッドを使用してが呼び出されたときに応答するnext
とすると、メソッドの呼び出しは、呼び出されるeach
たびにどのようになりnext
ますか?Enumeartorクラスは、のすべてのコンテンツをプリロードし、o.each
列挙用のローカルコピーを作成しますか?next
または、enumeartorで呼び出されるまで、各yieldステートメントで操作をハングさせるある種のRubyマジックはありますか?
内部コピーが作成された場合、それはディープコピーですか?外部列挙に使用できるI/Oオブジェクトはどうですか?
Ruby1.9.2を使用しています。
ruby - Ruby Enumerable クラス max_by を拡張して nil を無視する方法は?
max_by をオーバーロードして nil 値を無視する方法は?