問題タブ [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.
delphi - 建設中のforで作成された列挙子はどのように破棄されますか?
TCollectionから派生したコレクションがあり、GetEnumeratorを実装しているため、次のような構造で使用できます。
列挙子は、Delphiが提供する標準の列挙子とまったく同じように、TObjectから派生しているため、所有者はありません。
Delphiのヘルプには、列挙子がIDisposableをサポートしている場合、それは破棄されると記載されていますが、それはもちろん.NET専用です。
私が疑問に思っていたのは、列挙子インスタンスがいつ、どのように、誰によって解放されるのかということです。
c# - イテレータ ブロックの引数の破棄
さて、これは悪いコードの良い部分です:
そして今、問題へのいくつかのコンテキスト:
CachingProxyList
IEnumerable<T>
は、カスタムの「キャッシング」列挙子を提供するの実装です。IEnumerable<T>
コンストラクターを受け取り、最初はそれを列挙しますが、各項目をプライベートList<T>
フィールドに保存するため、実際の解析に進む前にそれをさらに反復します (むしろときどき解析する; または、その小さな部分を照会するためだけに巨大なログを解析する必要がある)。
この最適化は実際には必要であり、そのほとんどは既に機能していることに注意してください (ステートメントを削除すると、using
ファイル ハンドルのリークを除いてすべてがうまくいきます)。
Parse
との両方Tokenize
がイテレータブロックです(私の知る限り、実行を延期し、同時にコードをきれいにすることができる唯一の正気の方法です)。それらの署名はIEnumerable<Event> Parse(IEnumerable<Token>)
とIEnumerable<Token> Tokenize(StreamReader)
です。彼らの論理は問題とは無関係です。
論理的な流れは非常に明確です。そして、コードの各部分の意図はかなり明白です。しかし、これらのusing
ブロックは、遅延実行全体とはうまくいきません (オブジェクトを列挙するまでに、Log
オブジェクトusing
は既に終了しており、ストリームは破棄されているため、Tokenize
それから読み込もうとすると悲惨なクラッシュが発生します)。
比較的長い間、ファイル (開いているストリーム) をロックする余裕はありますが、遅かれ早かれ、ファイルを閉じる必要があります。sは実際には使用できないため、using
明示的にストリームを破棄する必要があります。
問題は、呼び出しをDispose()
どこに置くべきかということです。このようなシナリオに対処するための一般的なイディオムはありますか? 私はこれを「古い方法」で行いたくありません (いくつかの場所でリソースをリリースし、どこかでコードが少し変更されるたびにリリースごとにレビューしなければならない、など)。
私の最初のアイデアは、Log
クラスを使い捨てにすることでした。そのため、そのコンストラクターはファイル名を取り、クラス内のすべてのリソース管理を行うことができました (Log
完了時に消費者のみがそれ自体を破棄する必要があります)。しかし、作成する方法がわかりません。コンストラクターを呼び出す前にストリームを保存しますbase
(ストリームは、そのコンストラクターの引数を生成する呼び出しに必要です)。
注:CachingProxyList
厳密に必要でない限り、触れないでください(再利用できるように十分に一般的なものにしたいです)。特に、コンストラクターは、実装の残りの部分が大きく依存するいくつかの不変条件 (内部の列挙子オブジェクトが決して null にならないなど) を強制するために不可欠です。他のすべて、OTOHは公正なゲームでなければなりません。
これをお読みいただきありがとうございます。また、提供されたヘルプについても事前に感謝します;)
。
c# - C#:リンクリストの逆列挙子にアクセスする
LinkedListの「逆反復子」を作成しました。次に、拡張メソッドで使用したいと思います。
しかし、私が書く場合:
動作しません。
私は何をすべきか?
haskell - フィルタリング/分岐列挙
enumerator-0.4.10を使用しており、着信ストリームのさまざまな部分の処理をさまざまな反復に分散する必要があります(巨大なXMLファイルを解析しており、サブツリーごとに処理ロジックが異なります)。サブツリーは交差しないため、一度にアクティブになるのは1つの反復子のみです。
ストリームをフィルタリングし、結果を1つの反復子に渡す簡単な例を作成しました。下記を参照してください。ただし、ネストされた反復が複数あると、列挙子を使用できなくなったように見えます。複数の内部反復を保持する独自の複数列挙子を作成する必要がありますか?より良いアイデアはありますか?
ネストされた単一の反復子の(初心者の)コードは次のとおりです。
delphi - TDictionary から派生したクラスのカスタム列挙子を作成する方法は?
TDictionary から派生したコレクションを定義しましたが、追加のフィルターを適用するカスタム列挙子を定義する必要があります。
TDictionary FItems 配列 (非公開) にアクセスできないため、MoveNext メソッドを定義できません。
TDictionary から派生したクラスでフィルター処理された列挙子をどのように再定義しますか?
私がやりたいことを説明するための簡単なコードは次のとおりです。
ruby-on-rails - 検索はオブジェクトではなく列挙子を返します
私はRails 3アプリに取り組んでおり、コントローラーの1つに次のような行があります:
アイデアは、いくつかの制約に従ってDBから一連の「機能」を取得し、そのセットから特に1つを選択することです。問題のレコードが DB に存在するが、制約に適合しない場合、それを返したくありません。したがって、私は@features.find
ではなくやっていFeature.find
ます。
私が抱えている問題は@feature.title
、エラーを生成しているビューが必要であることです:
もちろん、上記をこれに置き換えることで問題を回避できます。ここでは、制約を 2 回定義するだけです。
しかし、これはエレガントではなく、少し冗長に思えます。
最善の解決策は何ですか? ビューでアクセスする必要がある変数/メソッドを欠いているのではなく、@features.find
結果をそのまま処理するにはどうすればよいですか?Feature
Enumerator
これについてご意見をお寄せいただきありがとうございます。
list - C#静的インデックスカウンターを使用して独自のリストを作成しようとしています
List
で使える機能を自分で作りたいforeach loop
。IndexOf のような他の重要なコマンドもList
あります (リストは動的に変化するため、これだけが気に入らない点です)。私のリストにあるものは、すべてのインデックスを追跡する必要があります。Add
、Contains
、Count
、Remove
、および[]
アクセサ (これを行う方法がわからない) と同様に、今のGet
ところトリックを実行する必要があります。
List は、エンティティと呼ばれる基本クラスにキャストする必要があります。これは、類似性のために他の 2 つのクラス Npc / Player 間で共有されます。
とにかく、私はこのサーバーもコーディングしているクライアントを制御できませんが、プロトコル仕様では、すべてのプレーヤーが、通常のリストがインデックスに対して行う劇的な動的変更を行わずにインデックスを追跡する必要があります。
自分で作成する方法のチュートリアルに従っていますが、Collections
解決できないエラーが3つになりました。
また、私はこれを正しくやっていますか?または何かが危険に見えます。
助けてくれてありがとう.. C# のこの部分は非常に高度で、概念を把握するのが難しいようです。
EntityList へのソース
EntityListEnumerator へのソース
}
file - SSIS Foreach ADO Enumerator の使用時にファイル名を取得する方法
これが私の問題です。ファイルパスを完全な結果セット (つまり、\server\myfolder) に返す最初の SQL タスクがあります。次に、System.Object である変数 "USER::VAR_SQL" があります。
次に、SQL 実行タスクを foreach ループ コンテナーに接続し、「コレクション」で「Foreach ADO Enumerator」を選択し、「変数マッピング」で ADO オブジェクト変数「USER::VAR_SQL」として、USER::filepath を変数として追加しました。 .
さて、各 USER::VAR_SQL 値をループして、フォルダー内の各ファイル *.txt を列挙するにはどうすればよいですか? myfolder 内のファイルにアクセスする方法が見つかりません。
前もってありがとう
ruby - Ruby-2つの列挙子をエレガントに比較します
Ruby(1.9.2)の2つの異なるソース(バイナリデータ)からの2つの長い数値ストリームがあります。
2つのソースは、2つの列挙子の形式でカプセル化されます。
2つのストリームが完全に等しいことを確認したいと思います。
私はいくつかの解決策を持ってきましたが、どちらも非常にエレガントではないようです。
最初のものは、単に両方を配列に変換します。
これは機能しますが、特にストリームに大量の情報がある場合は、メモリに関してはあまりパフォーマンスが高くありません。
他のオプションは...うーん。
それで、これを行うためのより簡単でよりエレガントな方法はありますか?
haskell - Haskell 列挙子: iteratees `enumWith` 演算子に類似?
今日の初めに、実際にデータをコピーするための iteratee と進行状況を書き込むための iteratee を構成する iteratee 用の小さなテスト アプリを作成しました。私は次のような値で終わりました:
列挙子ライブラリを見ると、sequence_
またはの類似物は見当たりませんenumWith
。私がやりたいのは、2 つの iteratee を構成して、1 つとして機能させることだけです。結果を破棄することもできます (()
とにかくそうなるでしょう) または保持することもできますが、気にしません。(&&&) from Control.Arrow は、矢印ではなく iteratees に対してのみ、私が望むものです。
私はこれらの2つのオプションを試しました:
最初のものはファイルをコピーしますが、進行状況は表示されません。2番目のものは進行状況を示しますが、ファイルをコピーしません。したがって、列挙子の反復に対する組み込みの sequence_ の効果は、最初の反復を終了するまで実行してから、もう一方を実行することです。これは私が望むものではありません。iteratees を直列ではなく並列に実行したい。明らかな何かが欠けているように感じwc
ますが、列挙子ライブラリの例を読んでいると、次の興味深いコメントが表示されます。
この発言は、列挙フレームワーク内で iteratee を組み合わせたり構成したりすることは、そのままでは不可能であることを示しているのだろうか。これを行う一般的に受け入れられている正しい方法は何ですか?
編集:
これを行う組み込みの方法はないようです。enumSequenceやmanyToOneなどのコンビネータの追加について Haskell メーリング リストで議論されていますが、これまでのところ、この機能を提供する enumerator パッケージには実際には何もないようです。