C#數組維度轉換:一維數組&二維數組&三維數組相互轉換


最近項目需要用到數組維度轉換,網上資源較少,寫一個分享與備用

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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM