コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】Dictionary を結合する方法

目次

foreach で結合する

using System;
using System.Collections.Generic;

public static class Program
{
    private static void Main()
    {
        var table1 = new Dictionary<int, string>
        {
            { 1, "フシギダネ" },
            { 2, "フシギソウ" },
            { 3, "フシギバナ" },
        };

        var table2 = new Dictionary<int, string>
        {
            { 4, "ヒトカゲ" },
            { 5, "リザード" },
            { 6, "リザードン" },
        };

        var table3 = new Dictionary<int, string>();

        // 1 つ目の Dictionary を結合
        foreach ( var n in table1 )
        {
            table3.Add( n.Key, n.Value );
        }
        
        // 2 つ目の Dictionary を結合
        foreach ( var n in table2 )
        {
            table3.Add( n.Key, n.Value );
        }

        foreach ( var n in table3 )
        {
            Console.WriteLine( n );
        }
    }
}

LINQ で結合する(キーが重複する場合は例外)

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

public static class Program
{
    private static void Main()
    {
        var table1 = new Dictionary<int, string>
        {
            { 1, "フシギダネ" },
            { 2, "フシギソウ" },
            { 3, "フシギバナ" },
        };

        var table2 = new Dictionary<int, string>
        {
            { 4, "ヒトカゲ" },
            { 5, "リザード" },
            { 6, "リザードン" },
        };

        // Dictionary を結合
        var table3 = table1
                     .Concat( table2 )
                     .ToDictionary( c => c.Key, c => c.Value );

        foreach ( var n in table3 )
        {
            Console.WriteLine( n );
        }
    }
}
  • ソースコードの先頭に using System.Linq; を記述する必要があります
  • 重複したキーが存在する場合は結合時に例外が発生するので注意してください

LINQ で結合する(キーが重複しても大丈夫)

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

public static class Program
{
    private static void Main()
    {
        var table1 = new Dictionary<int, string>
        {
            { 1, "フシギダネ" },
            { 2, "フシギソウ" },
            { 3, "フシギバナ" },
        };

        var table2 = new Dictionary<int, string>
        {
            { 4, "ヒトカゲ" },
            { 5, "リザード" },
            { 6, "リザードン" },
        };

        // Dictionary を結合
        var table3 = table1
                     .Concat( table2 )
                     .GroupBy( c => c.Key )
                     .ToDictionary( c => c.Key, c => c.FirstOrDefault().Value );

        foreach ( var n in table3 )
        {
            Console.WriteLine( n );
        }
    }
}
  • ソースコードの先頭に using System.Linq; を記述する必要があります
  • 重複したキーが存在する場合は最初に見つかった要素が残ります

参考サイト様