1// 2次元配列2public interface Mat2<E>{3// インデクサー4 E this[int i,int j]{ get; set;}5// 全要素数6int Length { get;}7// 各次元の長さ8intGetLength(int rank);9// 転置行列のビュー10 Mat2<E> Transpose { get;}11}1213// ビューの実装14public class Mat2View<E>: Mat2<E>{15 public E this[int i,int j]{16 get {return elements[i, j];}17 set { elements[i, j]= value;}18}19 public int Length => elements.Length;20 public intGetLength(int rank)=> elements.GetLength(rank);21 public Mat2<E> Transpose {22 get {return new Transposed(elements);}23}24 private E[,] elements;25 public Mat2View(E[,] elements){26 this.elements = elements;27}2829// 2次元配列の転置ビュー30 class Transposed: Mat2<E>{31 public E this[int i,int j]{32 get {return elements[j, i];}33 set { elements[j, i]= value;}34}35 public int Length => elements.Length;36 public intGetLength(int rank)=> elements.GetLength(1- rank);37 public Mat2<E> Transpose {38 get {return new Mat2View<E>(elements);}39}40 private E[,] elements;41 internal Transposed(E[,] elements){ this.elements = elements;}42}43}
1ArrayList[,] hoge = new ArrayList[4,5]();23bool change = true;45for(int i=0;i<4;i++)//for文A6{7for(int j=0;j<5;j++)//for文B8{9//データ取得部10 var a = change ? i : j;11 var b = change ? j : i;12 hoge[a,b].Add(a.ToString()+":"+ b.ToString());13}14}