C# のイテレータ
イテレータは、配列やリストなどで要素を取得し、反復を 1 つずつ実行するために使用されるメソッドです。 yield return ステートメントは、コレクションの要素を返すために iterator メソッドとともに使用され、yield Break は、コレクションの要素を返すために使用されます。反復を停止します。常に現在の位置を保存し、次の反復が行われるときに次の要素を返します。 IEnumerable および IEnumerator オブジェクトの値は、yield の戻り値の型です。このトピックでは、C# のイテレータについて学びます。
C# イテレータ メソッド
以下は、ループ、foreach ループ、列挙子などのさまざまなメソッドを使用した反復を示す例です。
1. For ループ
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main(string[] args) { for (int i = 1; i <= 7; i++) { Console.WriteLine( i); } Console.WriteLine("Press Enter Key to Exit.."); Console.ReadLine(); } } }
for ループは 3 つのステートメントで構成されます。最初に初期化が実行され、次にブール式である条件が実行されます。その後、イテレータが実行されて、初期化された変数の値が変更されます。この for ループのプロセスは条件が false になるまで継続され、条件が false になると for ループは終了します。
出力:
2. ForEach ループ
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main(string[]args) { string[] values = new string[3] { "John", "Bob", "Eva" }; foreach (string name in values) { Console.WriteLine(name); } Console.WriteLine("Press Enter Key to Exit.."); Console.ReadLine(); } } }
キーワード内の foreach ループは、項目を反復するために使用されます。キーワードは、各反復で項目を選択するために使用されます。最初の項目は反復され、2 番目の項目以降の要素に格納されます。 foreach の反復回数は、コレクション内の要素の数によって異なります。この例では、コレクションは 3 つの値で構成されているため、foreach が 3 回実行され、値が表示されます。
出力:
3.列挙子
例 #1
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static IEnumerable<string> GetArray() { int[] array = new int[] { 12, 45, 56, 21, 4 }; // initializing array elements foreach (var element in array) // iterating array element { yield return element.ToString(); // returning elements } } public static void Main(string[]args) // main method { IEnumerable<string> elements = GetArray(); // storing array element foreach(var element in elements) { Console.WriteLine(element); Console.ReadKey(); } } } }
この例では、5 つの要素を含む要素の配列があり、各要素の反復に foreach が使用されます。 yield ステートメントは、各反復後に要素を返すために使用されます。 IEnumerable インターフェイスは各要素を格納しますが、foreach は反復から返された要素を表示するために使用されます。このイテレータはメソッドで使用されます。
出力:
例 2
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static IEnumerable<string> GetList() { List<string> list = new List<string>(); list.Add("Sunday"); // adding elements to list list.Add("Monday"); list.Add("Tuesday"); list.Add("Wednesday"); list.Add("Thursday"); list.Add("Friday"); list.Add("Saturday"); foreach(var element in list) //iteration of list elements { yield return element; //returning elements after iteration } } public static void Main(string[]args) // main method { IEnumerable<string> elements = GetList(); // storing elements foreach(var element in elements) { Console.WriteLine(element); Console.ReadKey(); } } } }
この例では、リスト コレクションが使用され、リストに要素を追加するために list.add メソッドが使用されます。ここでのリストは 7 つの要素で構成されています。 foreach は各要素の反復に使用されます。 yield ステートメントは、各反復後に要素を返すために使用されます。 IEnumerable インターフェイスは各要素を格納しますが、foreach は反復から返された要素を表示するために使用されます。
出力:
例 #3
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static void Main(string[] args) { foreach(var item in fib(6)) // iteration of elements { Console.WriteLine(item); } } public static IEnumerable<int> fib(int number) { int x = 0, y = 1; // yield return x; //yield return y; for (int i=0; i<=number; i++) { int temp = x; x = y; y = temp + y; yield return y; // returning the element Console.ReadKey(); } } } }
この例では、フィボナッチ数列が生成され、演算子で反復子が使用されます。これの実装は、メソッドでイテレータを使用したのと同じですが、この演算子ではものを返すために使用されます。
出力:
例 #4
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main() { List<int> list = new List<int>(); list.Add(10); // adding elements to list list.Add(20); list.Add(30); list.Add(40); list.Add(50); list.Add(60); list.Add(70); List<int>.Enumerator a = list.GetEnumerator(); Write(a); } static void Write(IEnumerator<int> a) { while (a.MoveNext()) { int value = a.Current; Console.WriteLine(value); Console.ReadKey(); } } } }
上記の例ではリストコレクションを使用しています。 List.add メソッドは、リストに要素を追加するために使用されます。ここのリストには 7 つの要素が含まれています。 MoveNext と Current が使用されます。 MoveNext は基本的に次の要素が存在するかどうかを追跡し、要素が利用可能な場合は true、要素がない場合は false となるブール値を返しますが、現在の要素を取得するために current が使用されます。
出力:
イテレーターの長所と短所
メリットとデメリットについては以下で説明します
メリット
- イテレーターはメソッドおよび取得アクセサーとして使用できます。
- 演算子またはプロパティとして使用できます。
- イテレータは読みやすく、実装も簡単です。
- 反復子は、ジェネリック コレクションと非ジェネリック コレクションで使用されます。
デメリット
- イテレータはリストのバックトラッキングには役に立ちません。
- 反復子は位置を保存するため、反復構造を更新できません。
- イテレータは、静的コンストラクター、静的ファイナライザー、インスタンス コンストラクターでは使用されません。
結論
値のシーケンスを走査するには、foreach ステートメントで反復子を使用できます。 Yield はイテレータとともに複数回使用して要素を返すことができます。実装は簡単で非常に便利です。
以上がC# のイテレータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

XML形式を変更する方法はいくつかあります。Atepadなどのテキストエディターを使用して手動で編集する。 XmlBeautifierなどのオンラインまたはデスクトップXMLフォーマットツールを使用して自動的にフォーマットします。 XSLTなどのXML変換ツールを使用して変換ルールを定義します。または、Pythonなどのプログラミング言語を使用して解析および操作します。元のファイルを変更してバックアップするときは注意してください。
