2D Java配列を斜めにループする

1. 概要

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

2. 二次元配列

配列の要素を操作する際の鍵は、その配列から特定の要素を取得する方法を知ることです。 2次元配列の場合、行と列のインデックスを使用して配列の要素を取得します。 この問題については、次の図を使用してこれらの要素を取得する方法を示します。
link:/uploads/LoopingDiagonallyThrough2DArray-2.png []
次に、図に示されているように、配列に対角線がいくつあるかを理解する必要があります。 これを行うには、まず配列の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)があります。 この変数は、ループ変数__i___が_midPoint_以下である場合、ループ内で1ずつ増加します。 それ以外の場合は、1ずつ減分されます。
_itemsInDiagonal、_をインクリメントまたはデクリメントした後、ループ変数_j_を持つ新しいループが作成されます。 変数__j __は、_itemsInDiagonal._未満になるまで0から増分されます。
次に、ループ変数__i __and _j_を使用して、行と列のインデックスを取得します。 この計算のロジックは、ループ変数_i_が__midPoint ** ** __より大きいかどうかによって異なります。 __i ___が_midPoint_より大きい場合、, _ 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次元配列を斜めにループする方法を示しました。
いつものように、例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-arrays-2[GitHubで]から入手できます。