C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のイテレータ関数とは?yield returnの使い方をサンプルコードで解説

イテレータメソッドとは、コレクションに対して独自の反復処理(カスタムイテレーション)を行うためのメソッドです。C#では yield return ステートメントを使用することで、各要素を一度に1つずつ順番に返すことができます。イテレータは現在の処理位置を記憶しており、次に反復処理が呼び出された際には、その続きの要素が自動的に返されます。

以下に、C#におけるイテレータメソッドの基本的な使用例を示します。

サンプルコード

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo {
    class Program {
        public static IEnumerable display() {
            int[] arr = new int[] {99,45,76};

            foreach (var val in arr) {
                yield return val.ToString();
            }
        }

        public static void Main(string[] args) {
            IEnumerable ele = display();
            foreach (var element in ele) {
                Console.WriteLine(element);
            }
        }
    }
}

実行結果

99
45
76

上記のコードでは、display() というイテレータメソッドを定義しています。このメソッド内では yield return ステートメントを使い、配列の各要素を1つずつ文字列に変換しながら返しています。

public static IEnumerable display() {
    int[] arr = new int[] {99,45,76};

    foreach (var val in arr) {
        yield return val.ToString();
    }
}

Main メソッド側では、display() の戻り値を受け取り、foreach ループによって各要素を順番に取り出してコンソールに出力しています。

IEnumerable ele = display();
foreach (var element in ele) {
    Console.WriteLine(element);
}

このように yield return を活用することで、遅延評価(要素が必要になった時点で初めて生成される仕組み)が実現され、メモリ効率の良い反復処理を書くことができます。大量のデータを扱う場合や、シーケンスを段階的に処理したい場面で特に有効な手法です。

  1. JavaScriptの高階アロー関数とは?基本概念と実装例をわかりやすく解説

    JavaScriptでは、関数はオブジェクトとして扱われます。そのため、関数を別の関数に引数として渡したり、関数の戻り値として別の関数を返したりすることが可能です。このように、JavaScriptの関数は「第一級関数(ファーストクラス関数)」と呼ばれており、変数やオブジェクト、配列などに自由に格納できます。高階アロー関数(Higher Order Arrow Functions)は、関数を引数として受け取る、関数を返す、あるいはその両方を行うことができる関数のことです。高階アロー関数のサンプルコード以下は、JavaScriptで高階アロー関数を実装した例です。配列の各要素を2倍にする処理を、関

  2. JavaScriptのアロー関数(短縮関数)とは?thisの違いをサンプルコードで解説

    JavaScriptのアロー関数(短縮関数)とは? アロー関数は、ES2015(ES6)で導入された関数の新しい記法で、「速記関数」「短縮関数」とも呼ばれます。従来のfunctionキーワードを使った関数式と比べて、はるかに短く簡潔に関数を記述できるのが大きな魅力です。 アロー関数最大の特徴は、thisへの独自のバインディングを持たないという点です。通常の関数では呼び出され方によってthisの値が変わりますが、アロー関数の場合は定義された場所の外側のスコープ(周囲のコンテキスト)からthisを受け継ぎます。これにより、ネストした関数の中でthisが意図しない値を指してしまうトラブルを簡単に回避