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

C#でソート済みの2つの配列をリストにマージする方法

C#では、ソート済みの2つの配列を1つのリストに簡単にマージ(結合)することができます。この記事では、基本的な手順とサンプルコードを使って、その方法をわかりやすく解説します。

マージの手順

まず、マージ対象となる2つのソート済み配列を用意します。以下はその例です。

int[] array1 = { 1, 2 };
int[] array2 = { 3, 4 };

次に、List<int> のインスタンスを作成し、forループを使って両方の配列の要素を交互にリストへ追加していきます。

var list = new List<int>();
for (int i = 0; i < array1.Length; i++) {
    list.Add(array1[i]);
    list.Add(array2[i]);
}

最後に、ToArray() メソッドを使用することで、マージされたリストを再び配列に変換できます。

サンプルコード

以下に、実際に動作する完全なサンプルプログラムを示します。ここでは、それぞれ3つの要素を持つ2つの配列をマージしています。

using System;
using System.Collections.Generic;

public class Program {
    public static void Main() {
        int[] array1 = { 56, 70, 77};
        int[] array2 = { 80, 99, 180};
        var list = new List<int>();

        for (int i = 0; i < array1.Length; i++) {
            list.Add(array1[i]);
            list.Add(array2[i]);
        }
        int[] array3 = list.ToArray();

        foreach(int res in array3) {
            Console.WriteLine(res);
        }
    }
}

実行結果

上記のプログラムを実行すると、以下のように出力されます。2つの配列の要素が交互にマージされていることが確認できます。

56
80
70
99
77
180

補足:全体をソートした状態でマージしたい場合

上記の方法では、要素が単純に交互に追加されるため、結果の配列は必ずしもソートされた状態にはなりません。もしマージ後も昇順に並べ替えた状態を維持したい場合は、LINQの Concat()OrderBy() を組み合わせるのが便利です。

int[] merged = array1.Concat(array2).OrderBy(x => x).ToArray();

このように書くことで、2つの配列のすべての要素を結合しつつ、自動的に昇順で並べ替えることができます。用途に応じて使い分けてください。

  1. Pythonで2つのソート済みリストを1つにマージする方法

    2つのソート済み(昇順に並べ替えられた)リストAとBがあるとします。これらをマージして、1つのソート済みリストCを作成することを目標とします。なお、2つのリストのサイズは同じである必要はありません。例えば、A = [1, 2, 4, 7]、B = [1, 3, 4, 5, 6, 8] の場合、マージ後のリストCは [1, 1, 2, 3, 4, 4, 5, 6, 7, 8] となります。アルゴリズムの考え方この問題は再帰を使うことでシンプルに解くことができます。merge() 関数の動作は以下のようになります。関数 merge() にリストAとBを渡すAが空ならBを返し、Bが空ならAを返す(ベ

  2. Pythonのheapqモジュールを使って2つのソート済みリストをマージする方法

    この記事では、Pythonのheapqモジュールを使用して、2つのソート済みリストを1つにマージする方法を解説します。例えば、list1 = [10, 20, 30, 40]とlist2 = [100, 200, 300, 400, 500]という2つのリストがある場合、マージ後は[10, 20, 30, 40, 100, 200, 300, 400, 500]のような結果が得られます。heapqモジュールとはheapqはPythonに標準で搭載されているライブラリモジュールのため、追加のインストールは不要です。利用する前にインポートするだけで使えます。import heapqheapqモジュ