如何声明一个二维字符串数组?


79
string[][] Tablero = new string[3][3];

我需要一个3x3的阵列来保存信息。如何在C#中声明呢?


3
该文档清楚地显示了如何执行此操作:msdn.microsoft.com/en-us/library/9b9dty7d.aspx
Esteban Araya


1
请注意,根据上面的链接,OP代码[] [](锯齿状数组结构)和可接受的答案[,](多维)之间存在差异。
amalgamate

Answers:


110
string[,] Tablero = new string[3,3];

您还可以使用数组初始化器语法在同一行中实例化它,如下所示:

string[,] Tablero = new string[3, 3] {{"a","b","c"},
                                      {"d","e","f"}, 
                                      {"g","h","i"} };

2
或者,var tablero = new string[3,3];如果您使用的是C#3或更高版本
bdukes,2010年

9
如果您使用数组初始值设定项语法,则无需提供界限(即,您可以编写new string[,]
bdukes 2010年

2
您根本不需要写new string[,]...string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
Jim Balter,2016年

1
为了澄清[3,3]中的前3个是行数,第二个3是列数(每个人似乎都选择[3,3]只是为了混淆:
bytedev

54

您可能想要这样:

string[,] Tablero = new string[3,3];

这将创建一个矩阵状的数组,其中所有行的长度相同。

样本中的数组是所谓的锯齿状数组,即元素可以具有不同大小的数组的数组。锯齿状的数组必须以其他方式创建:

string[][] Tablero = new string[3][];
for (int i = 0; i < Tablero.GetLength(0); i++)
{
    Tablero[i] = new string[3];
}

您还可以使用初始化程序以数据填充数组元素:

string[,] Tablero = new string[,]
{
    {"1.1","1.2", "1.3"},
    {"2.1","2.2", "2.3"},
    {"3.1", "3.2", "3.3"}
};

并且在锯齿状数组的情况下:

string[][] Tablero = new string[][]
{
    new string[] {"1.1","1.2", "1.3"},
    new string[] {"2.1","2.2", "2.3"},
    new string[] {"3.1", "3.2", "3.3"}
};


11

我假设您正在寻找:

        string[,] Tablero = new string[3,3];

锯齿状数组的语法为:

        string[][] Tablero = new string[3][];
        for (int ix = 0; ix < 3; ++ix) {
            Tablero[ix] = new string[3];
        }

10

在C#中,有两种类型的多维数组,称为MultidimensionalJagged

对于多维,您可以:

string [,] multi =新的string [3,3];

对于锯齿状数组,您必须编写更多代码:

string[][] jagged = new string[3][];
            for (int i = 0; i < jagged.Length; i++)
            {
                jagged[i] = new string[3];
            }

简而言之,锯齿状数组不仅速度更快,而且语法直观。有关更多信息,请参见:此Stackoverflow问题


3
在锯齿状的情况下,您可以像string[][] jagged = { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } }; 直接将其初始化var jagged = new[] { new[] { "a", "b", "c" }, new[] { "d", "e", "f" }, new[] { "g", "h", "i" } };
nawfal 2013年



6

string[][]不是一个二维阵列,它的一个数组的数组(一个交错数组)。那不一样

要声明二维数组,请使用以下语法:

string[,] tablero = new string[3, 3];

如果您确实想要锯齿状的数组,则需要像这样初始化它:

string[][] tablero = new string[][] { new string[3], 
                                      new string[3], 
                                      new string[3] };

6

3x3(多维)数组也可以这样初始化(您已经声明过):

string[,] Tablero =  {
                        { "a", "b", "c" },
                        { "d", "e", "f" }, 
                        { "g", "h", "i"} 
                     };


@JohnSaunders我看不到。在rhs上忽略整个类型是不同的。
nawfal

1
不,完全一样。
约翰·桑德斯

1
@JohnSaunders我建议使用另一种初始化方式。没有多少人知道她可以在数组初始化期间省略大小甚至在rhs上键入。当然也一样。由于问题更像是“我如何声明/初始化”,这也是一种方法。请参阅此Eric的答案,其中他分别提到了每种技术。
2013年

2
哦好的。我会摆脱我的反对意见,但似乎已经消失了。
约翰·桑德斯

6

当您尝试创建多维数组时,您需要做的就是在声明中添加一个逗号,如下所示:

string[,] tablero = new string[3,3].

3

您还可以编写以下代码。

Array lbl_array = Array.CreateInstance(typeof(string), i, j);

其中“ i”是行数,“ j”是列数。使用'typeof(..)'方法,您可以选择数组的类型,即int,string,double


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.