1. 概要

このチュートリアルでは、2次元配列を斜めにループする方法を説明します。 私たちが提供するソリューションは、あらゆるサイズの正方形の2次元配列に使用できます。

2. 2次元配列

配列の要素を操作する際の鍵は、その配列から特定の要素を取得する方法を知ることです。 2次元配列の場合、行と列のインデックスを使用して配列の要素を取得します。 この問題では、次の図を使用して、これらの要素を取得する方法を示します。

次に、図に示すように、配列に対角線がいくつあるかを理解する必要があります。 これを行うには、最初に配列の1次元の長さを取得し、次にそれを使用して対角線の数(diagonalLines を取得します。

次に、対角線の数を使用して、行と列のインデックスの検索に役立つ中点を取得します。

この例では、中点は3つです。

int length = twoDArray.length
int diagonalLines = (length + length) - 1
int midPoint = (diagonalLines / 2) + 1

3. 行と列のインデックスの取得

配列全体をループするには、ループ変数がdiagonalLines変数以下になるまで1からループを開始します。

for (int i = 1; i <= diagonalLines; i++) {
    // some operations
}

また、対角線上のアイテム数の概念をitemsInDiagonalと呼びましょう。 たとえば、上の図の3行目には3つの項目(g、e、c)があり、4行目には2つの項目(h、f)があります。 この変数は、ループ変数imidPoint以下の場合、ループ内で1ずつ増加します。 それ以外の場合は、1ずつデクリメントされます。

itemsInDiagonal、をインクリメントまたはデクリメントした後、ループ変数jを持つ新しいループが作成されます。 変数jは、itemsInDiagonal。より小さくなるまで0からインクリメントされます。

次に、ループ変数iおよびjを使用して、行と列のインデックスを取得します。 この計算のロジックは、ループ変数imidPointより大きいかどうかによって異なります。 imidPointより大きい場合、length変数を使用して行と列のインデックスを決定します。

int rowIndex;
int columnIndex;

if (i <= midPoint) {
    itemsInDiagonal++;
    for (int j = 0; j < itemsInDiagonal; j++) {
        rowIndex = (i - j) - 1;
        columnIndex = j;
        items.append(twoDArray[rowIndex][columnIndex]);
    }
} else {
    itemsInDiagonal--;
    for (int j = 0; j < itemsInDiagonal; j++) {
        rowIndex = (length - 1) - j;
        columnIndex = (i - length) + j;
        items.append(twoDArray[rowIndex][columnIndex]);
    }
}

4. 結論

このチュートリアルでは、行と列のインデックスを取得するのに役立つメソッドを使用して、正方形の2次元配列を斜めにループする方法を示しました。

いつものように、例の完全なソースコードは、GitHubから入手できます。