🐡

【C#プログラミング】C#のZipメソッドとは?

2024/11/06に公開

はじめに

C#の勉強をしていたらZipメソッドという使えそうなメソッドがあったので紹介します。C#のZipメソッドは、2つのコレクション(列挙可能なシーケンス)を要素ごとに結合し、結果を新しいシーケンスとして返すLINQ拡張メソッドです。このメソッドは、2つのシーケンスを並列に処理して、それぞれの要素をペアにして結びつけます。

基本的な使い方

Zipメソッドのシグネチャは以下のようになっています。

public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
    this IEnumerable<TFirst> first,
    IEnumerable<TSecond> second,
    Func<TFirst, TSecond, TResult> resultSelector
);
TFirst: 最初のシーケンスの要素の型
TSecond: 2番目のシーケンスの要素の型
TResult: 結果として得られるペアの要素の型
first: 最初の列挙可能なシーケンス
second: 2番目の列挙可能なシーケンス
resultSelector: 2つの要素を1つの結果に結合するための関数(通常はFunc<TFirst, TSecond, TResult>

使用例

次の例では、2つの整数のリストをZipメソッドを使って結合し、対応する要素を足し合わせて新しいリストを作成しています。

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

class Program
{
    static void Main()
    {
        var list1 = new List<int> { 1, 2, 3, 4 };
        var list2 = new List<int> { 5, 6, 7, 8 };

        // Zipを使って2つのリストを結合し、それぞれの要素を足し合わせる
        var result = list1.Zip(list2, (a, b) => a + b);

        foreach (var item in result)
        {
            Console.WriteLine(item); // 出力: 6, 8, 10, 12
        }
    }
}

結果:

6
8
10
12

この例では、Zipはlist1とlist2の対応する要素を1対1で結びつけ、その後、(a, b) => a + bというラムダ式を使って、各ペアを足し合わせています。

おすすめ・参考書籍

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
https://amzn.to/3YFmdH5

Discussion