問題タブ [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.
c# - (理論的には)無限の量のアイテムを返す列挙子をどのように設計しますか?
私はこれに似たコードを書いています:
明らかに、このメソッドは決して戻りません。(C#コンパイラはこれを黙って許可しますが、R#は「関数が戻らない」という警告を表示します。)
一般的に言って、列挙を停止する方法を提供せずに、無限の数のアイテムを返す列挙子を提供することは悪い設計ですか?
このシナリオについて特別な考慮事項はありますか?Mem?パフォーマンス?他の落とし穴?
常に終了条件を指定する場合、どのオプションがありますか?例えば:
- 包括的または排他的な境界を表すタイプTのオブジェクト
- a
Predicate<T> continue
(TakeWhile
そうです) - カウント(
Take
そうです) - ..。
Take(...)
/TakeWhile(...)
後に呼び出すユーザーに依存する必要がありますUnfold(...)
か?(既存のLinqの知識を活用しているため、おそらく推奨されるオプションです。)
コードがそのまま(一般的)またはこのパターンの特定の実装としてパブリックAPIで公開される場合、この質問に別の方法で答えますか?
c++ - COM IEnumXxx インターフェイスの for_each?
IEnumUnknown を返す COM オブジェクトがあります。それをSTLスタイルのイテレータに変えるものはありますか? 私はこのようなことができるように:
...または類似?
c# - 一度に2つの配列を反復する方法は?
テキスト ファイルの解析中に 2 つの配列を作成しました。1 番目には列名が含まれ、2 番目には現在の行の値が含まれます。マップを作成するには、両方のリストを一度に反復処理する必要があります。現在、私は次のものを持っています:
これは問題なく機能しますが、私のエレガントな感覚を完全には満足させません。また、配列の数が 2 つよりも多い場合 (私は時々そうしなければなりません)、非常に面倒になります。誰かが別の簡潔なイディオムを持っていますか?
asp.net-mvc - ASP.NET MVCでフォームコレクションを列挙するにはどうすればよいですか?
ASP.NET MVCで FormCollection (system.web.mvc) のすべてのキー/値を列挙するにはどうすればよいですか?
c# - Hashtable から nk/v ペアをコピー
n 個のレコードを持つハッシュテーブルがあります。x と y の間のレコードをコピーして、それらを反復処理する必要があります。
どうすればいいですか?
例:
HT1.Count = 500;
HT2 = HT1[0] - HT1[100];
- 編集 -
ご存知のように、これの理由は、.MSG ファイルから PDF を生成しているためです。12GBのPDFを取得すると問題が発生するという問題がエンドユーザーに発生します:P
PDF を 250 のメッセージに分割してから、新しい PDF を開始する必要があります。したがって、順序は実際には問題ではなく、毎回同じレコードを返すことも重要ではありません。これは 1 回しか行われないためです。
c# - DataSet:列挙子とFindByIdは等しいDataRowを返しません
私のコードの今日の問題はちょっと奇妙で、まだ再現できませんでした。型指定されたデータセット(デザイナーで作成)を使用していて、データテーブルのすべての行をループしています。
時々(!)、主キーを介して検索するときに、返される行が列挙子からの行と等しくない場合があります。これは、問題を再現するために私が書いたコードです。
FindByIdは常に同じ行を返すため、コンソールには行が書き込まれません。これは実際には論理的です。私のプロジェクトのコードでは、いくつかの文字列列を持つ同様のデータセットで、行の約3%(常に同じ行!)ではそうではなく、文字列フィールドの1つは空です:
主キーは唯一の主キーフィールドであるため、FindByIdは生成されたメソッドです。誰かが少しヒントを知っているか、以前に同じ問題を経験したことがありますか?このバグや機能を有効にするのは、私が作成した非常に特殊なケースだと思います。:)
列挙によるキャストでこれが生まれる可能性を考えました。列挙子はDataRow
、生成された型付き行の基本型を処理します。しかし、私はそこで何か問題を見つけませんでした...
乾杯マティアス
ruby - Rubyの早い段階で.each{}の反復をエスケープする
コード:
最初の10個のアイテムを取得してから、「各」ループを終了します。
コメント行を何に置き換えますか?より良いアプローチはありますか?もっとRuby慣用句?
wmi - プロセスに関連付けられた .NET クラスの取得
作成中の WMI 結合プロバイダーの一部として、インスタンス列挙子を作成する必要があります。私が持っているコードは以下です。私がする必要があるのは、プロセスに関連付けられた Class インスタンスを取得することです。何か案は?
c# - C# でコレクションを変更するためのパターンは何ですか?
このような問題のパターン (ベスト プラクティス) は何ですか? コレクション内の要素 (値) を変更しますか?
条件:
- コレクションのサイズは変更されません (要素は削除または追加されません)
- 変更はインプレースです
C++ では、コレクションを反復処理して要素を変更するだけで、簡単でよかったです。しかし、C# では (列挙子を使用した) 反復処理は読み取り専用操作です (C++ に関して言えば、const_iterator のみが使用可能です)。
では、C# でこれを行うにはどうすればよいでしょうか。
例: "1,2,3,4" のシーケンスを変更すると、"1, 2, 8, 9" に変更されますが、"1, 2, 3" または "1, 2, 3, 4, 5" には変更されません。
c# - 同期された IEnumerator
カスタムSynchronizedCollection<T>
クラスをまとめて、WPF アプリケーション用に同期された Observable コレクションを作成できるようにしています。同期は、ほとんどの場合、簡単に適用できる ReaderWriterLockSlim を介して提供されます。私が問題を抱えているのは、コレクションのスレッドセーフな列挙を提供する方法です。次のようなカスタムのIEnumerator<T>
ネストされたクラスを作成しました。
ただし、Enumerator が Disposed でない場合、ロックが解除されないことが懸念されます。foreach は Dispose を適切に呼び出す必要があるため、ほとんどのユース ケースではこれは問題になりません。ただし、コンシューマーが明示的な Enumerator インスタンスを取得する場合は問題になる可能性があります。Enumerator を明示的に使用する場合、またはファイナライズ中にロックを安全に解放する方法がある場合、消費者に Dispose を呼び出すことを思い出させる警告実装者でクラスを文書化する唯一のオプションはありますか? ファイナライザーは同じスレッド上でさえ実行されないため、私はそうは考えていませんが、これを改善する他の方法があるかどうか興味がありました.
編集
これについて少し考え、回答を読んだ後 (特にハンスに感謝)、これは間違いなく悪い考えだと判断しました。最大の問題は、実際には Dispose を忘れていることではなく、のんびりとした消費者が列挙中にデッドロックを作成していることです。コピーを取得し、コピーの列挙子を返すのに十分な時間だけ読み取りロックします。