2010-08-15 44 views
2

並感謝您的期待。如何初始化一個C#數組,其維數在運行時決定?

我有一個2D c#數組,它有50個維度之一。另一個維度取決於某處數據庫中的行數,並在運行時決定。我將如何去初始化這樣的數組?

目前我對單行初始化看起來是這樣,但我敢肯定有更好的方式來做到這一點,更有效地:)

temp = new Double[50,1] { {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},{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}}; 

回答

5

只需在運行時使用第二維的整數變量初始化數組。

double[,] = new double[50, v]; 

C#會自動初始化所​​有雙打爲零,所以在您的特定情況下,你並不需要顯式初始化值。

+0

感謝您的默認初始化提示。我記得嘗試這個和失敗,所以我發佈了這個問題。一定忽略了一些東西。無論如何,它現在工作正常:) – Freakishly 2010-08-16 17:37:17

1
double[,] temp = new double[50,1]; 

double[][] temp = new double[50][]; 

看看here有關的更多信息陣列。

1

如果陣列的第二暗淡可以改變使用jagged array

double [][] temp = new double [50][]; 

當你就會知道數組的確切大小暗淡你設置它。

temp[index] = new double[length]; 

如果它總是有矩形的大小使用以下構建

double [,] temp = new double[50, length]; 
+0

這不是一個二維數組,這是一個鋸齒狀的數組。這意味着到目前爲止它只是一個50個空引用的數組,你必須創建50個數組並放入數組中。然而,將記錄的數據分散到50個單獨的數組看起來並不合邏輯,最外層的數組寧願持有行而不是列。 – Guffa 2010-08-15 19:23:25

4

由於Toby said,你不需要明確地設置double值爲零,因爲default(double) == 0.0

但是,如果你想一個數組的所有成員初始化爲比默認爲陣的類型的其他一些值,你總是可以做到這一點:

static T[,] GetInitializedArray<T>(int width, int height, T value) 
{ 
    var array = new T[width, height]; 
    for (int x = 0; x < width; ++x) 
    { 
     for (int y = 0; y < height; ++y) 
     { 
      array[x, y] = value; 
     } 
    } 

    return array; 
} 

這將使你寫的代碼,如這個:

double[,] temp = GetInitializedArray(50, 1, 0.0);