最近項目需要用到數組維度轉換,網上資源較少,寫一個分享與備用
1.一維數組轉二維數組
/// <summary> /// 一維數組轉2維數組(矩陣) /// </summary> /// <param name="obj"></param> /// <param name="len">矩陣行數</param> /// <returns></returns> public static T[,] OneD_2<T>(T[] obj,int len) { if (obj.Length % len != 0) return null; int width = obj.Length / len; T[,] obj2 = new T[len, width]; for (int i = 0; i < obj.Length; i++) { obj2[i / width, i % width] = obj[i]; } return obj2; }
2.一維數組轉三維數組
/// <summary> /// 一維數組轉3維數組 /// </summary> /// <param name="obj"></param> /// <param name="len">一維長</param> /// <param name="wid">二維長</param> /// <returns></returns> public static T[,,] OneD_3<T>(T[] obj,int len,int wid) { if (obj.Length % (len* wid) != 0) return null; int height = obj.Length / (len * wid); T[,,] obj2 = new T[len, wid, height]; for (int i = 0; i < obj.Length; i++) { //核心思想把握每個維度的值多久變一次與設置最大值,變化頻率設置用除法,設置最大值用求余 //第二及之后的維度最大值為自身維度最大值 -1(意思就是最后需要對自身維度最大值求余) obj2[i / (wid* height), (i / height) % wid, i % height] = obj[i]; } return obj2; }
3.二維數組轉一維數組
/// <summary> /// 二維數組轉一維數組 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static T[] TwoD_1<T>(T[,] obj) { T[] obj2 = new T[obj.Length]; for (int i = 0; i < obj.Length; i++) obj2[i] = obj[i / obj.GetLength(1), i % obj.GetLength(1)]; return obj2; }
4.三維數組轉一維數組
/// <summary> /// 三維數組轉一維數組 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static T[] ThreeD_1<T>(T[,,] obj) { T[] obj2 = new T[obj.Length]; int wid = obj.GetLength(1);//GetLength從0開始 int height = obj.GetLength(2); for (int i = 0; i < obj.Length; i++) obj2[i] = obj[i / (wid * height), (i / height) % wid, i % height]; return obj2; }