簡體   English   中英

從鋸齒狀數組(int [*,*])轉換為2d數組(int [] [])

[英]cast type from jagged array (int[*,*]) to 2d array (int[][])

如何將int [ ]轉換為int [] []

當我嘗試時,發生以下給定的錯誤。
無法將類型“ int[*,*]隱式轉換為int[][]

我的目標是首先創建一個鋸齒狀數組,然后將其轉換為2d數組。

 private int[][] initStaticBoard()
    {

        int[,] board = new int[,] {
            {0,0,0,0,0},
            {0,0,0,0,0},
            {0,0,0,0,0},
            {0,0,0,0,0},
            {0,0,0,0,0}
        };
        int[][] result = board; 

        return result*emphasized text*;
    }

在方陣和鋸齒狀陣列之間沒有強制轉換。 您將必須將board重構為鋸齒狀的陣列:

public static T[][] SquareArrayToJAggedArray<T>(T[,] square)
{
    T[][] jagged = new T[square.GetLength(0)][];

    for (int i = 0; i < jagged.Length; i++)
    {
        jagged[i] = new T[square.GetLength(1)];

        for (int j = 0; j < jagged[i].Length; j++)
        {
            jagged[i][j] = square[i, j];
        }
    }

    return jagged;
}

並這樣稱呼它:

private int[][] initStaticBoard()
{
    int[,] board = new int[,] {
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0},
        {0,0,0,0,0}
    };

    int[][] result = SquareArrayToJaggedArray(board); 
    return result;
}

不過,我不必擔心轉換,而只是建議您選擇其中一個並堅持使用。 兩者之間的轉換涉及為新數組分配新的內存,如果您要處理大型數組或轉換的頻率太高,這可能會很快加起來。 此外,由於重建,對新陣列的更改不會影響舊陣列,反之亦然。

如果要表示的數據是具有固定寬度和長度的結構,則使用正方形數組。 如果不同的子數組具有不同的長度,請使用鋸齒狀的數組。

鋸齒狀數組可以這樣初始化:

int[][] board = { new int[5], new int[5], new int[5], new int[5], new int[5] };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM