未定义的数组初始化和绑定数据

时间:2014-05-23 20:53:14

标签: c# arrays

将我的数百行数组减少到2 ..

很想知道是否有不同的方法来实例化数组并允许以下代码

public [,]ary = new double[,]{
     { 11.4, 11.4, 11.4, 11.4, 11.4, 11.3, 10.9, 17.3, 10.6 },
     { 14.6, 14.6, 14.6, 14.6, 14.6, 14.6, 14.6}
}

目前我通过在数组2中的第8和第9位添加0来解决了我的问题

或者如果我必须输入

ary[0,1] = [...]
.
.
//Skipping 8th and 9th position in array 2

1 个答案:

答案 0 :(得分:1)

一种选择是编写一种方法将锯齿状数组转换为二维数组,初始化锯齿状数组然后转换它。这将导致任何数组比使用默认值填充的最大数组短,这似乎是你想要的。

public static T[,] MakeSquare<T>(this T[][] jagged)
{
    int maxWidth = jagged.Max(array => array.Length);
    T[,] output = new T[jagged.Length, maxWidth];
    for (int i = 0; i < output.GetLength(0); i++)
        for (int j = 0; j < output.GetLength(1); j++)
        {
            output[i, j] = jagged[i][j];
        }
    return output;
}

现在你可以写:

double[,] array = new double[][]
{
    new[]{ 11.4, 11.4, 11.4, 11.4, 11.4, 11.3, 10.9, 17.3, 10.6 },
    new[]{ 14.6, 14.6, 14.6, 14.6, 14.6, 14.6, 14.6}
}.MakeSquare();

现在这个方法确实意味着在运行时增加一些成本以换取程序员方面的便利,但是如果这些是您定义为文字的数组,那么它们实际上不应该太大以至于将它们的数据复制到新阵列非常昂贵。如果有那么多内容,你不应该将它定义为文字数据,而是将其放在数据库或其他东西中。