Zipメソッドによるマージ処理

プログラミングC# 第6版 8.3.6


二つのデータを一つのデータにまとめます。

Concatのように結合するのではなく、同じ要素で一まとめにするといった感じです。まぁ文章より実装を見た方が早いですね。

using System;
using System.Linq;

class Program {
    static void Main() {
        // それぞれ3要素の配列を用意。
        int[] nums = new int[] {1,2,3};
        string[] strs = new string[] {"foo","bar","baz"};
        
        // numsとstrsをマージする
        var ret = nums.Zip(strs,(num,str) => new { id = num, name = str });
        
        foreach(var item in ret) {
            Console.WriteLine("id={0} name={1}",item.id,item.name);
        }
    }
}
$ main
id=1 name=foo
id=2 name=bar
id=3 name=baz

ここでも匿名型が活躍です。それぞれ3要素の値を持つ配列をZipを使って匿名型で一まとめにするといった感じですね。

注意点としては、マージする配列の要素数が違う場合、多いほうの要素が捨てられてしまいます。

なのでそもそも論ですが、マージする場合は要素が同じもの同士でやるべきという感じですかね。