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

C#で2つのDictionary(辞書)をマージして結合する方法

C#では、Dictionary<string, int> 型の2つの辞書を、HashSetUnionWith() メソッドを組み合わせることで簡単にマージできます。本記事では、その具体的な手順をサンプルコード付きで解説します。

ステップ1:2つの辞書を作成する

まず、マージ対象となる2つの辞書を用意します。

Dictionary<string, int> dict1 = new Dictionary<string, int>();
dict1.Add("laptop", 1);
dict1.Add("desktop", 2);

Dictionary<string, int> dict2 = new Dictionary<string, int>();
dict2.Add("desktop", 3);
dict2.Add("tablet", 4);
dict2.Add("mobile", 5);

ここで注目したいのは、「desktop」というキーが両方の辞書に存在している点です。マージ後には重複が自動的に排除されます。

ステップ2:HashSetとUnionWith()メソッドでマージする

HashSet のコンストラクタに1つ目の辞書のキー一覧(Keys)を渡し、その後 UnionWith() メソッドで2つ目の辞書のキーを統合します。HashSet は重複した要素を許容しないため、両方の辞書に存在するキーは1度だけ登録されます。

HashSet<string> hSet = new HashSet<string>(dict1.Keys);
hSet.UnionWith(dict2.Keys);

サンプルコード全体

以上の手順をまとめた完全なプログラムは以下の通りです。

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        Dictionary<string, int> dict1 = new Dictionary<string, int>();
        dict1.Add("laptop", 1);
        dict1.Add("desktop", 2);

        Dictionary<string, int> dict2 = new Dictionary<string, int>();
        dict2.Add("desktop", 3);
        dict2.Add("tablet", 4);
        dict2.Add("mobile", 5);

        HashSet<string> hSet = new HashSet<string>(dict1.Keys);
        hSet.UnionWith(dict2.Keys);

        Console.WriteLine("Merged Dictionary...");

        foreach (string val in hSet) {
            Console.WriteLine(val);
        }
    }
}

実行結果

Merged Dictionary...
laptop
desktop
tablet
mobile

重複していた「desktop」が1回だけ出力され、両方の辞書のキーが正しく統合されていることが確認できます。なお、HashSet は要素の順序を保証しないため、出力順序は実行環境によって異なる場合があります。

補足:値も含めてマージしたい場合

上記の方法はキーのみを統合する手法である点に注意してください。値(Value)も含めて辞書同士を結合したい場合は、foreach ループで要素を1つずつコピーするか、LINQ の Concat()GroupBy()ToDictionary() を活用すると柔軟に対応できます。

  1. C++で2つの2進数文字列を加算するプログラムの書き方

    2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁

  2. Pythonで2つの数値を加算するプログラム:ビット演算による実装方法

    この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを