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

【JavaScript】2次元配列(行列)を転置する方法をわかりやすく解説

2次元配列の転置とは?

行列(2次元配列)の転置(Transpose)とは、元の配列の行と列を入れ替えた新しい配列を作る操作のことです。具体的には、行方向に並んでいた要素を列方向へ、列方向に並んでいた要素を行方向へと反転させたものが転置行列になります。

例えば、次のような2次元配列を考えてみましょう。

const arr = [
    [1, 1, 1],
    [2, 2, 2],
    [3, 3, 3],
];

この配列を転置すると、各行・各列の要素が入れ替わり、結果は以下のようになります。

[ [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ] ]

転置処理のコード例

ここでは、配列そのものを書き換えるインプレース(破壊的)な方法で転置を実装します。ポイントは、ij の位置にある要素同士を交換するとき、内側のループを j < i の範囲にすることです。こうすることで対角線より下側の要素だけを処理し、同じペアを二重に交換してしまうことを防げます。

const arr = [
    [1, 1, 1],
    [2, 2, 2],
    [3, 3, 3],
];

const transpose = arr => {
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < i; j++) {
            const tmp = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = tmp;
        };
    }
}

transpose(arr);
console.log(arr);

実行結果

このコードをコンソールで実行すると、次のような出力が得られます。

[ [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ] ]

補足:元の配列を保持したい場合

上記の実装は元の配列を直接書き換えます。もし元の配列を残しておきたい場合は、map を使って新しい配列として転置結果を生成する方法も便利です。

const transpose = arr => arr[0].map((_, i) => arr.map(row => row[i]));

用途に応じて、破壊的な方法と非破壊的な方法を使い分けるとよいでしょう。

  1. JavaScriptのArray.prototype.map()メソッドの使い方を徹底解説

    Array.prototype.map()とは? JavaScriptのArray.prototype.map()メソッドは、配列の各要素に対してコールバック関数を実行し、その戻り値から新しい配列を作成するためのメソッドです。元の配列は変更されないため、安全にデータ変換を行いたい場合に非常に便利です。 構文 arr.map(function callback(currentValue[, index[, array]]) 各引数の意味は以下のとおりです。 currentValue:現在処理している要素の値 index(省略可能):現在処理している要素のインデックス番号 array(省略可能

  2. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の