はじめに
上記サイト様が公開されているプログラムを参考に
二次元配列を回転させる拡張メソッドを作成しました
ソースコード
public static class ArrayExt { // 時計回りに 90 度回転 public static T[,] RotateClockwise<T>( this T[,] self ) { int rows = self.GetLength( 0 ); int columns = self.GetLength( 1 ); var result = new T[columns, rows]; for ( int i = 0; i < rows; i++ ) { for ( int j = 0; j < columns; j++ ) { result[ j, rows - i - 1 ] = self[ i, j ]; } } return result; } // 時計回りに 90 * count 度回転 public static T[,] RotateClockwise<T>( this T[,] self, int count ) { for ( int i = 0; i < count; i++ ) { self = self.RotateClockwise(); } return self; } // 反時計回りに 90 度回転 public static T[,] RotateAnticlockwise<T>( this T[,] self ) { int rows = self.GetLength( 0 ); int columns = self.GetLength( 1 ); var result = new T[columns, rows]; for ( int i = 0; i < rows; i++ ) { for ( int j = 0; j < columns; j++ ) { result[ columns - j - 1, i ] = self[ i, j ]; } } return result; } // 反時計回りに 90 * count 度回転 public static T[,] RotateAnticlockwise<T>( this T[,] self, int count ) { for ( int i = 0; i < count; i++ ) { self = self.RotateAnticlockwise(); } return self; } }
使用例
using System; using System.Text; public static class Program { private static void Main() { var array = new[,] { { 1, 2, 3, }, { 4, 5, 6, }, }; // 通常 // 1,2,3 // 4,5,6 Draw( array ); // 時計回りに 90 度回転 // 4,1, // 5,2, // 6,3, Draw( array.RotateClockwise() ); // 時計回りに 180 度回転 // 6,5,4, // 3,2,1, Draw( array.RotateClockwise( 2 ) ); // 時計回りに 270 度回転 // 3,6, // 2,5, // 1,4, Draw( array.RotateClockwise( 3 ) ); // 反時計回りに 90 度回転 // 3,6, // 2,5, // 1,4, Draw( array.RotateAnticlockwise() ); // 反時計回りに 180 度回転 // 6,5,4, // 3,2,1, Draw( array.RotateAnticlockwise( 2 ) ); // 反時計回りに 270 度回転 // 4,1, // 5,2, // 6,3, Draw( array.RotateAnticlockwise( 3 ) ); } private static void Draw( int[,] array ) { var builder = new StringBuilder(); for ( int i = 0; i < array.GetLength( 0 ); i++ ) { for ( int j = 0; j < array.GetLength( 1 ); j++ ) { builder.Append( array[ i, j ] + "," ); } builder.AppendLine(); } Console.WriteLine( builder.ToString() ); Console.WriteLine(); } }