[解決済み] イテレータとエニュメレータの区別
質問
.NET 3.5の面接での質問は、「イテレータと列挙子の違いは何ですか?
これは、LINQなどで行う中核的な区別です。
とにかく、この違いは何なのでしょうか?ネット上で確かな定義を見つけることができないようです。間違いなく、2 つの用語の意味を見つけることはできますが、微妙に異なる回答が得られます。面接ではどのような答えがベストなのでしょうか?
IMOはイテレータ"イテレート"コレクション上を、列挙者はイテレートする機能を提供しますが、これは呼び出されなければなりません。
また、yieldキーワードを使用すると、状態が保存されると言われています。この状態とは具体的にどのようなものでしょうか?このメリットが発生する例はあるのでしょうか?
どのように解決するのですか?
反復はいくつかのステップを繰り返すことを意味し、列挙は値のコレクション内のすべての値を通過することを意味します。そのため、列挙には通常、何らかの形で反復が必要となります。
このように、列挙は、コレクションから値を取得するステップである反復処理の特殊なケースです。
列挙は再帰的に実行されることもありますが、再帰と反復は非常に密接に関連しているので、この小さな違いは気にしません。
また、明示的にコレクションに保存しない値を列挙することもできます。たとえば、自然数、素数、その他を列挙することができますが、これらの値は列挙中に計算し、物理的なコレクションから取得することはありません。この場合、何らかのロジックで定義された値を持つ仮想的なコレクションを列挙していると理解することができます。
リード・コプシーがポイントをつかんだと仮定します。C#では、何かを列挙するには、2つの主要な方法があります。
-
実装する
Enumerable
を実装したクラスとIEnumerator
-
イテレータを実装した
yield
ステートメントで実装します。
最初の方法は実装が難しく、列挙するためにオブジェクトを使用します。2番目の方法は実装が簡単で、継続を使用します。
関連
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] 基本的なイテレータを作るには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する