表の見栄え、見やすさを考えたときに、行と列を入れ替えたくなる時があります。
もちろん内容によりますが、スクロールを考えるとヨコが長いのは見づらいものですw
配列の行列(タテヨコ)を入れ替えるサンプル
果物、野菜、犬種の二次元配列をもとに、行と列を入れ替えます。
また、入れ替える前後で、配列データを標準出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | public class ArrayRotateTest { public static void main(String[] args) { //入れ替え元の配列を用意 String[][] targetArray = new String[][] { {"メロン","バナナ","みかん","りんご","いちご"}, {"きゅうり","はくさい","なす","きゃべつ","にんじん"}, {"シェパード","レトリバー","ボーダーコリー","チワワ","ハスキー"}, }; //入れ替え元の配列を出力 System.out.println("--- from ---"); print(targetArray); //入れ替え先の配列を用意 String[][] destArray = new String[targetArray[0].length][targetArray.length]; //入れ替え先の配列に値をコピー for(int i=0 ; i<targetArray.length ; i++) { for(int j=0 ; j<targetArray[0].length ; j++) { destArray[j][i] = targetArray[i][j]; } } //入れ替え先の配列を出力 System.out.println("--- to ---"); print(destArray); } private static void print(String[][] array) { for(int i=0 ; i<array.length ; i++) { for(int j=0 ; j<array[i].length ; j++) { if(j != 0) { System.out.print(","); } System.out.print(array[i][j]); } System.out.println(); } } } |
実行結果
入れ替える前と後で、配列データが標準出力されます。
1 2 3 4 5 6 7 8 9 10 | --- from --- メロン,バナナ,みかん,りんご,いちご きゅうり,はくさい,なす,きゃべつ,にんじん シェパード,レトリバー,ボーダーコリー,チワワ,ハスキー --- to --- メロン,きゅうり,シェパード バナナ,はくさい,レトリバー みかん,なす,ボーダーコリー りんご,きゃべつ,チワワ いちご,にんじん,ハスキー |
サンプルの解説
行と列の入れ替えは、「入れ替え先の配列[j][i] = 入れ替え元の配列[i][j]」で実施しています。
入れ替え元配列と入れ替え先配列のインデックスを逆転することで値を反転しています。
今回は行と列の入れ替えを行いましたが、このような方法で左右反転、上下反転、回転も同様にできます。
また、行によって列のサイズが異なるような場合では、入れ替え先の配列を準備する際、データをコピーする際に注意が必要です。