ホームページ >バックエンド開発 >C++ >C# で LINQ とイテレーターがファイルを 1 行ずつ効率的に読み取るにはどうすればよいですか?

C# で LINQ とイテレーターがファイルを 1 行ずつ効率的に読み取るにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-04 17:25:40607ブラウズ

How Can LINQ and Iterators Efficiently Read a File Line by Line in C#?

LINQ とイテレーターを使用した C# でのファイルを 1 行ずつ読み取る

テキスト ファイルを操作する場合、多くの場合、各行を個別に処理する必要があります。 C# では、このタスクに対していくつかのアプローチが提供されていますが、LINQ では、運用効率を損なうことなく、より簡潔で効率的なソリューションを提供できます。

古典的なアプローチには、StreamReader の利用が含まれます。ただし、LINQ は、より柔軟で読みやすいコードを可能にする強力な代替手段を提供します。イテレータを使用して一連の行を作成すると、ファイル全体をメモリにロードする必要がなく、ストリーミング形式で処理できるようになります。

このようなイテレータ ベースの LINQ 式の例を次に示します。 :

static IEnumerable<string> ReadFrom(string file) {
    string line;
    using(var reader = File.OpenText(file)) {
        while((line = reader.ReadLine()) != null) {
            yield return line;
        }
    }
}

この関数は、指定されたファイルから読み取られた一連の行を返します。各行は読み取られたときに生成されるため、遅延評価と効率的な処理が可能になります。

行をさらに処理するには、Where、Select、Aggregate などの LINQ メソッドを使用して、フィルタリング、マッピング、集計を実行できます。明示的な反復を必要としない操作。例:

var typedSequence = from line in ReadFrom(path)
                    let record = ParseLine(line)
                    where record.Active // for example
                    select record.Key;

この例では、ReadFrom 関数を使用して一連の行を作成します。次に、各行は ParseLine 関数を使用してデータ レコードに解析されます。 Where 句は非アクティブなレコードを除外し、Select 句は残りの各レコードからキー値を射影します。

要約すると、LINQ とイテレータを使用して、効率的で保守可能な行ごとのファイル読み取りコードを作成できます。 C#。イテレータの機能を活用することで、ファイル全体をメモリにロードするオーバーヘッドを回避し、ファイル処理プロセスを合理化できます。

以上がC# で LINQ とイテレーターがファイルを 1 行ずつ効率的に読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。