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

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

C#で2つのソート済み配列を1つにまとめる(マージする)には、List<int>を経由するのがシンプルで分かりやすい方法です。ここでは、2つの配列の要素を交互に追加して新しい配列を作成する手順を解説します。

手順1:2つのソート済み配列を用意する

まずは、マージ対象となる2つのソート済み配列を定義します。

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

手順2:リストに要素を追加してマージする

次に、空のリストを作成し、forループを使って2つの配列の要素を交互に追加していきます。これにより、両方の配列が1つのリストに結合されます。

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

この例では、各ループの繰り返しごとにarray1array2から1つずつ要素を取り出しているため、結果として「1, 3, 2, 4」という順序で要素が並ぶことになります。

手順3:ToArray()メソッドで配列に戻す

最後に、ToArray()メソッドを使用すれば、リストを再び整数型の配列に変換できます。

int[] array3 = list.ToArray();

完全なサンプルコード

ここまでの手順をすべて組み合わせたコードが以下の通りです。

using System;
using System.Collections.Generic;

public class Program {
    public static void Main() {
        int[] array1 = { 1, 2 };
        int[] array2 = { 3, 4 };
        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);
        }
    }
}

実行結果

1
3
2
4

注意点

この方法では、forループ内で両方の配列に同じインデックスでアクセスするため、2つの配列の長さが同じである必要があります。長さが異なる配列を扱う場合は、範囲チェックを追加するか、LINQのConcat()メソッドなど別のアプローチを検討するとよいでしょう。また、マージ後もソートされた状態を維持したい場合は、マージ後にlist.Sort()を呼び出すことで簡単に対応できます。

  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モジュ