簡體   English   中英

在C#中創建二維數組的數組

[英]Creating an array of two-dimensional arrays in C#

我只是想創建一個二維數組的數組來存儲坐標點。

所以我想要一個數組,其中每個索引返回一個二維數組,我將其用作xy

這是我嘗試過的:

waypoints = new int[4][,]    {
        {{0},{6, 0}},
        {{1},{1, 1}},
        {{2},{1, 5}},
        {{3},{6, 5}}
    };

我意識到這可能看起來很愚蠢,但我已經嘗試在 Google 上查找它,但沒有得到任何好的結果。

它給出了一個錯誤:

“錯誤 CS0623:數組初始值設定項只能用於變量或字段初始值設定項。嘗試使用新表達式代替”

我也試過這樣做:

waypoints = new int[4][,] {
        new int[,] {6, 0},
        new int[,] {1, 1},
        new int[,] {1, 5},
        new int[,] {6, 5}
        };

這給出了一個錯誤:

“錯誤 CS0846:需要嵌套數組初始值設定項”

初始聲明中需要一個大括號集{}

var waypoints = new int[4][,]   {
    new int[,] {{6}, {0}},
    new int[,] {{1}, {1}},
    new int[,] {{1}, {5}},
    new int[,] {{6}, {5}}
};

這是因為對於二維數組,數組中的每個元素都被視為用於初始化的數組(盡管它通常用於數組的每個元素,例如val[0,0] = 4; )。

編輯(評論反饋后):

int[][] (稱為jagged array ,即:數組成員可以是不同大小的數組的數組)相比, int[,]是一個具有固定維度的二維數組。 兩者都是存儲數組的數組,因此數組的每個元素都是一個數組。 這就解釋了為什么需要在上面的初始化中放置另一個大括號。

這樣的二維數組,當以不同的方式初始化時,將產生不同的維度(因此有多種初始化方法):

int[,] val = new int[,] { { 6 }, { 0 } }; //resulting in int[2,1]
int[,] val = new int[,] { { 6, 0 } }; //resulting in int[1,2]

無論哪種方式,都需要額外的花括號集

對於jagged array和多維、固定大小的數組之間的區別, 已經很多很好的解釋/基准可以從知名來源在線獲得。 而且我知道,除了 OP 的興趣之外,我提供更多有關它的信息並不重要。 (因此這個答案的范圍最初只針對回答失敗的初始化)。

據了解,該解決方案不適用於存儲坐標點(如 OP 所做的那樣)。 上面的解釋是為了解釋為什么他的初始化不起作用,而不是提供存儲坐標點的最佳方案。 至於存儲坐標點, System.Drawing struct中的Point將更合適(如評論中所建議)。

使用二維數組來表示二維笛卡爾坐標中的單個點是一種“矯枉過正”,因為一維數組已經能夠存儲計算機允許的盡可能多的數字,遠遠超過在笛卡爾坐標系中存儲點所需的兩個數字。

對此有一個簡單的答案。 使用“System.Drawing.Point”類的實例。 創建一個“點”數組來存儲坐標。 要創建數組:

Point[] points = new Point[4];

並為數組分配一個值(例如在位置 0)使用以下代碼。

points[0] = new Point(xvalue,yvalue);//Where "xvalue" and "yvalue" are integer variables.

並從點類的實例中獲取 X 和 Y 值。 使用下面的代碼。

int xvalue = points[0].X;

int yvalue = points[0].Y;

PS 您可以使用這些點來為控件分配位置,但那是另一回事了^_^

數組是二維的且大小未知,初始化程序可以定義各種大小的數組:

        var waypoints = new int[4][,]   {
                new int[,] { {1, 2, 6}, {3, 4, 5} }, // two rows, 3 columns
                new int[,] { {1, 1}, {1, 2} } , // 2 x 2
                new int[,] { {1, 5} }, // 1 x 2
                new int[,] { {6, 5} }
                };

我可能誤解了這個問題,但是你在數組中的維度不是太遠了嗎? 這與建議使用 Point 或 Vector 類的人的觀點有點相同。 如果每個數組只存儲一個點(它可能不是,我可能只是假設),則不需要 3 個維度。 您可以擁有一組常規數組,並使用索引 0 作為 x 坐標,使用索引 1 作為 y 坐標。

在我看來,您正在創建一個完整的第 3 維,其中每個數組的大小為 1,這將更簡單地可視化為 2d 數組。 雖然看起來您將數組用作一種鍵值對,但索引本身可以用作鍵嗎? 無論如何,它們似乎每次都在增加。

暫無
暫無

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

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