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

C#で整数配列内のすべての重複要素を検索する方法

C#で整数配列の中から重複している要素を見つけたい場合、Dictionary(ディクショナリ)を使うのが最もシンプルで効率的な方法の一つです。各要素の出現回数を記録していき、カウントが2以上のものが「重複要素」として特定できます。

この記事では、Dictionary<int, int> を使って配列内の重複要素とその出現回数を検出する具体的な手順を解説します。

手順1:重複要素を含む配列を用意する

まず、重複した値が含まれる整数型の配列を定義します。ここでは例として、10 と 32 がそれぞれ2回出現する配列を使用します。

int[] arr = {
    24,
    10,
    56,
    32,
    10,
    43,
    88,
    32
};

手順2:Dictionaryを使って出現回数をカウントする

次に、キーに配列の要素、値に出現回数を格納する Dictionary を宣言します。foreach ループで配列を走査しながら、すでにキーが存在する場合はカウントを+1し、存在しない場合は1で登録します。

var d = new Dictionary<int, int>();
foreach(var res in arr) {
    if (d.ContainsKey(res))
        d[res]++;
    else
        d[res] = 1;
}

この処理により、各要素が何回出現したかを O(n) の計算量で効率よく集計できます。

完全なサンプルコード

以下は、上記の手順をまとめた実行可能なプログラム全体です。最後に Dictionary の内容を出力して、各要素の出現回数を確認します。

using System;
using System.Collections.Generic;

namespace Demo {
    public class Program {
        public static void Main(string[] args) {
            int[] arr = {
                24,
                10,
                56,
                32,
                10,
                43,
                88,
                32
            };
            var d = new Dictionary<int, int>();
            foreach(var res in arr) {
                if (d.ContainsKey(res))
                    d[res]++;
                else
                    d[res] = 1;
            }
            foreach(var val in d)
                Console.WriteLine("{0} occurred {1} times", val.Key, val.Value);
        }
    }
}

実行結果

24 occurred 1 times
10 occurred 2 times
56 occurred 1 times
32 occurred 2 times
43 occurred 1 times
88 occurred 1 times

ポイントのまとめ

  • ContainsKey() メソッドで、その要素がすでに Dictionary に登録されているかどうかを判定できます。
  • 出現回数が2以上の要素(この例では 10 と 32)が重複要素です。
  • 必要に応じて、出力時に val.Value > 1 の条件を追加すれば、重複要素だけを抽出することも可能です。
  • この手法は計算量 O(n) であり、二重ループで比較する方法(O(n²))よりもはるかに高速です。

Dictionary を活用すれば、配列のサイズが大きくなってもパフォーマンスを維持しながら重複要素を簡単に検出できます。ぜひ実際のプロジェクトでも活用してみてください。

  1. Pythonで二分木の全ノードの値の合計を求めるプログラム

    二分木(バイナリツリー)にいくつかの値が格納されている場合、木に含まれるすべての値の合計を求めたいことがあります。例えば、次のような二分木が入力として与えられたとします。この場合、出力は 14 になります(2 + 4 + 3 + 5 = 14)。解決のアプローチこの問題を解くには、再帰を使って各ノードを順番に訪問し、値を足し合わせていきます。具体的な手順は以下の通りです。関数 recurse() を定義します。引数としてノードを受け取ります。変数 val に現在のノードの値を代入します。ノードの左の子が存在する場合は、val に左部分木の再帰結果を加算します。ノードの右の子が存在する場合は、v

  2. Pythonで文字列内の重複文字をすべて検索する方法を解説

    このチュートリアルでは、Pythonを使って文字列内に含まれるすべての重複文字を見つける方法を学びます。Pythonには複数のアプローチがあるので、それぞれ順番に見ていきましょう。 今回作成するプログラムの目的は、文字列の中に存在する重複した文字を抽出することです。例えば、文字列 tutorialspoint を入力すると、プログラムは t o i を出力します。つまり、文字列内で出現回数が2回以上の文字をすべて見つける、という処理になります。それでは始めましょう。 モジュールを使わずに書くプログラム 外部モジュールを一切使わず、Python標準の機能だけで目的を達成する方法を紹介します。まず