【问题标题】:How can I declare a two dimensional string array?如何声明二维字符串数组?
【发布时间】:2011-04-18 08:49:07
【问题描述】:
string[][] Tablero = new string[3][3];

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

【问题讨论】:

标签: c# arrays multidimensional-array jagged-arrays array-initialization


【解决方案1】:
string[,] Tablero = new string[3,3];

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

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

【讨论】:

  • var tablero = new string[3,3];,如果您使用的是 C# 3 或更高版本
  • 如果你使用数组初始化语法,你不需要提供边界(即你可以写new string[,]
  • 你根本不需要写new string[,] ... string [,] Tablero = {{"a","b","c"}, {"d","e","f"}, {"g","h","i"} }
  • 澄清 [3, 3] 中的前 3 是行数,后 3 是列数(每个人似乎都选择了 [3, 3] 只是为了混淆 :-) )
【解决方案2】:

你可能想要这个:

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

这将为您创建一个类似矩阵的数组,其中所有行都具有相同的长度。

示例中的数组是所谓的jagged array,即元素可以具有不同大小的数组数组。必须以不同的方式创建锯齿状数组:

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"},
    new string[] {"2.1", "2.2", "2.3", "2.4"},
    new string[] {"3.1", "3.2", "3.3"}
};

【讨论】:

    【解决方案3】:

    您刚刚声明了一个锯齿状数组。这种类型的数组在所有维度上都可以有不同的大小。例如:

    string[][] jaggedStrings =  {
    new string[] {"x","y","z"},
    new string[] {"x","y"},
    new string[] {"x"}
    };
    

    在您的情况下,您需要常规数组。请参阅上面的答案。 More about jagged arrays

    【讨论】:

      【解决方案4】:

      我假设你正在寻找这个:

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

      交错数组的语法是:

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

      【讨论】:

        【解决方案5】:

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

        对于多维你可以:

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

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

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

        简而言之,锯齿状数组既更快又具有直观的语法。更多信息请见:this Stackoverflow question

        【讨论】:

        • 在锯齿状的情况下,您可以像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" } };一样直接初始化它
        【解决方案6】:

        试试这个:

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

        看看http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

        【讨论】:

        • 这是一篇相关文章。我不能忍受很多 msdocs 文档的事情是仅使用简单的整数作为示例。他们至少应该有一些其他示例,尤其是带有字符串的示例。
        【解决方案7】:
        string[,] Tablero = new string[3,3];
        

        【讨论】:

          【解决方案8】:

          string[][] 不是二维数组,它是数组的数组(锯齿状数组)。那是不同的东西。

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

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

          如果你真的想要一个jagged array,你需要像这样初始化它:

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

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

            • @JohnSaunders 我没看到。在 rhs 上忽略整个类型是不同的。
            • 不,完全一样。
            • @JohnSaunders 我在建议一种不同的初始化方式。没有多少人知道她可以在数组初始化期间省略大小甚至在 rhs 上键入。当然它也是一样的。由于问题更像是“我如何声明/初始化”,这也是一种方式。请参阅此 Eric 的 answer,其中他分别提到了每种技术。
            • 哦,好的。我会摆脱我的反对票,但它似乎已经消失了。
            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

              您也可以编写下面的代码。

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

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

              【讨论】:

                【解决方案12】:

                在 C# here 中有很多使用数组的示例。

                我希望这会有所帮助。

                谢谢, 达米安

                【讨论】:

                  猜你喜欢
                  • 2012-06-01
                  • 1970-01-01
                  • 2014-01-14
                  • 2015-05-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-12
                  • 2022-01-15
                  相关资源
                  最近更新 更多