如何正确初始化和填充多维数组?

3

如何正确地初始化和填充多维数组?

string[] thisCanVaryInLength = new string[3] {"col1,nam1","col2,nam2","col3,nam3"};

string[,] columnsAndTheirNames = ?? //Unsure how to initialize

for (int i = 0; i < thisCanVaryInLength.Length; i++)
{
    columnsAndTheirNames[i, 0] = thisCanVaryInLength[0];
    columnsAndTheirNames[i, 1] = thisCanVaryInLength[1];
}
4个回答

2

如何看待这个问题:

string[,] columnsAndTheirNames = new string[thisCanVaryInLength.Length, 2];

或者使用值:
string[,] columnsAndTheirNames = new string[,] { 
                 {"col1,nam1", "col2,nam2"},
                 {"col1,nam1", "col2,nam2"},
                 {"col1,nam1", "col2,nam2"}};

这是您当前代码的作用,但也许您想要这样做:
string[,] columnsAndTheirNames = new string[,] { 
                 {"col1", "nam1"},
                 {"col2", "nam2"},
                 {"col3", "nam3"}};

1

有两种方法来分配一个二维数组

方法1:

在这里,您使用空字符串进行初始化

string[,] columnsAndTheirNames1 = new string[2, 3];

方法2:

在这里,您使用字符串字面量进行了初始化。

string[,] columnsAndTheirNames = {
                                    { "row1-col1", "row1-col2"},
                                    { "row2-col1", "row2-col2"},
                                    { "row3-col1", "row3-col2"}
                                };

在这里,您可以看到如何访问它:
for (int i = 0; i < columnsAndTheirNames.GetLength(0); ++i) {
    for (int j = 0; j < columnsAndTheirNames.GetLength(1); ++j) {
        Console.Write(columnsAndTheirNames[i, j] + "\t");
    }
    Console.WriteLine();
}

输出将如下所示

row1-col1       row1-col2
row2-col1       row2-col2
row3-col1       row3-col2

所以你的代码应该像下面这样:
string[] thisCanVaryInLength = new string[3] { "col1,nam1", "col2,nam2", "col3,nam3" };

string[,] columnsAndTheirNames = new string[2, thisCanVaryInLength.Length];

for (int i = 0; i < thisCanVaryInLength.Length; i++) {
    var items = thisCanVaryInLength[i].Split(',');
    columnsAndTheirNames[0, i] = items[0];
    columnsAndTheirNames[1, i] = items[1];
}

for (int i = 0; i < columnsAndTheirNames.GetLength(0); ++i) {
    for (int j = 0; j < columnsAndTheirNames.GetLength(1); ++j) {
        Console.Write(columnsAndTheirNames[i, j] + "\t");
    }
    Console.WriteLine();
}

而且输出是

col1    col2    col3
nam1    nam2    nam3

0

这个怎么样?

private static string[,] columnsAndTheirNames = new string[,]
{
    { "col1", "nam1" },
    { "col2", "nam2" },
    { "col3", "nam3" }
};

private void foo() {
    Console.WriteLine(columnsAndTheirNames [0, 0]); // col1
    Console.WriteLine(columnsAndTheirNames [0, 1]); // nam1
    Console.WriteLine(columnsAndTheirNames [1, 0]); // col2
    Console.WriteLine(columnsAndTheirNames [1, 1]); // nam2
}

0
string[,] values =
{
  {"col1","val1"},
  {"col2","val2"},
  {"col3","val3"},
};

在调试器中查看它的样子。


我认为OP中说到数组的内容可能会有所不同,因此变量的名称(thisCanVaryInLength),但我也可能错了。 - Rod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接