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

C#で2つのソート済み配列を1つにマージする方法【初心者向け解説】

C#では、複数の配列を1つの配列に結合(マージ)することができます。本記事では、2つのソート済みの整数型配列を用意し、それらを3つ目の配列に順番にコピーしてマージする基本的な方法を、サンプルコードと実行結果とともにわかりやすく解説します。

マージする2つの配列を定義する

まず、マージしたい2つの配列を宣言します。ここでは、それぞれ5つの要素を持つ整数型配列 arr1arr2 を用意します。

int[] arr1 = new int[5] {
    5,
    15,
    25,
    30,
    47
};
int[] arr2 = new int[5] {
    55,
    60,
    76,
    83,
    95
};

どちらの配列も昇順にソートされている点に注目してください。このように各配列がソート済みである場合、後述のように単純なループ処理でも効率よくマージできます。

マージ結果を格納する3つ目の配列を用意する

次に、両方の配列の要素を格納できるサイズ10の配列 merged を宣言します。サイズは「元の配列の要素数の合計」となるように指定します。

int[] merged = new int[10];

2つの配列を1つにマージする完全なコード例

以下が、2つの配列を3つ目の配列へ順番にコピーしてマージするC#プログラムの全体像です。for ループを使って、まず arr1 の全要素を merged にコピーし、続いて arr2 の全要素を同じ配列に追記していきます。

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        int i = 0;
        int j = 0;

        int[] arr1 = new int[5] {
            5,
            15,
            25,
            30,
            47
        };
        int[] arr2 = new int[5] {
            55,
            60,
            76,
            83,
            95
        };
        int[] merged = new int[10];

        // arr1 の要素を merged へコピー
        for (i = 0, j = 0; i < 5; i++) {
            merged[j++] = arr1[i];
        }
        // arr2 の要素を merged の続きへコピー
        for (i = 0; i < 5; i++) {
            merged[j++] = arr2[i];
        }

        Console.WriteLine("Elements of merged array = ");
        for (i = 0; i < 10; i++) {
            Console.WriteLine("merged[" + (i) + "]: " + merged[i]);
        }
        Console.WriteLine();
    }
}

コードのポイント

  • 変数 j:マージ先の配列 merged の書き込み位置を管理します。1つ目のループで0〜4番目に arr1 の要素を格納した後、そのまま位置を引き継いで arr2 の要素を5〜9番目に格納します。
  • j++(後置インクリメント):現在の値を使った後に1を加算するため、コピーと位置の更新を1行で簡潔に記述できます。
  • 出力用ループ:最後に merged の全要素(10個)をインデックス付きで表示し、マージ結果を確認します。

実行結果

上記プログラムを実行すると、コンソールには次のように出力されます。2つの配列の要素が、元の順序を保ったまま1つの配列に結合されていることが確認できます。

Elements of merged array =
merged[0]: 5
merged[1]: 15
merged[2]: 25
merged[3]: 30
merged[4]: 47
merged[5]: 55
merged[6]: 60
merged[7]: 76
merged[8]: 83
merged[9]: 95

補足:より汎用的なマージ方法

上記の例では配列のサイズが固定(5+5=10)でしたが、実際の開発では配列の長さが変わることも多いため、Length プロパティを使ってサイズを動的に決めるのがおすすめです。

int[] merged = new int[arr1.Length + arr2.Length];

Array.Copy(arr1, merged, arr1.Length);
Array.Copy(arr2, 0, merged, arr1.Length, arr2.Length);

また、LINQ を使えば arr1.Concat(arr2).ToArray() のように1行で連結することも可能です。ただし、これらはあくまで「連結」であり、マージ後に再びソート済みの状態を保ちたい場合は、別途 Array.Sort(merged) を呼び出すか、マージソートのアルゴリズムを実装して2つの配列を比較しながら統合するとよいでしょう。

まとめ

C#で2つの配列を1つにマージする基本は、「合計サイズの新しい配列を用意し、for ループで順番に要素をコピーする」ことです。本記事のコード例を参考にすれば、初心者の方でも簡単に配列のマージ処理を実装できます。応用として Array.Copy やLINQを活用すれば、より簡潔で柔軟なコードを書くこともできますので、ぜひ試してみてください。

  1. 【JavaScript】2つの配列を1つのオブジェクトに変換する方法をわかりやすく解説

    2つの配列を1つのJavaScriptオブジェクトに変換できる? はい、可能です。JavaScriptでは「キー」となる配列と「値」となる配列の2つを組み合わせて、1つのオブジェクトを作成できます。最も基本的な方法は、forEach()メソッドで片方の配列をループ処理しながら、もう片方の配列の対応する要素を値として代入していくやり方です。 以下に、実際に動作するサンプルコードを紹介します。 コード例 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name

  2. 2つのmacOSユーザーアカウントを1つに統合する方法

    macOSで2つのユーザーアカウントを使っていて、それらを1つにまとめたいと思ったことはありませんか?残念ながら、macOSにはアカウントを直接マージする標準機能は用意されていません。そこで本記事では、片方のアカウントのデータをバックアップしてから削除し、もう片方のアカウントへ移行・統合するまでの手順を詳しく解説します。1. データのエクスポートここで紹介する方法は、システム上に存在するローカルファイルを統合するというものです。ユーザーのホームフォルダ内にあるすべてのローカルファイルはディスクイメージとして保存され、新しいアカウントからアクセスできます。ただし、ローカルファイルにはアプリのバッ