【问题标题】:Initialize array of arrays with a set array length用设定的数组长度初始化数组数组
【发布时间】:2014-12-16 02:15:40
【问题描述】:

我想像在 java 中一样初始化一个数组数组:

int[][] arrPos=new int[16][48];
int[][] arrPosOther=new int[16][48];

我可以像这样设置一个行数组值:

arrPos[0]=arrPosOther[0];

我可以像这样设置一个单元格值:

arrPos[1][0]=125;

但在 C# 中,我只能这样声明:

int[][] arrPos=new int[16][];

不能在初始化时设置列值。

【问题讨论】:

  • 在 C# 中,您有 2 个选项 - 多维数组 int[,]int[,,] 或锯齿状数组 int[][]。这两个将涵盖所有阵列需求
  • 我知道 jagged 类型,但我想初始化一个数组,如 arr[255][255],我无法对那个场景进行成像。
  • 如果你问我,这-arr[255][255] 没有任何意义,因为你声明了255 的 256 个成员数组。第二个[] 是另一个数组所在的位置,而不是某个整数
  • @AndyFong 看起来您要求的内容与您发布的不同(可能是“如何将 2d 数组表示为 1d 数组”) - 考虑提出 new 的问题显示您正在寻找的内容。考虑接受 Alex Bell 的答案,该答案显示了问题中当前发布的内容的语法。
  • 我同意 Alexei Levenkov 的观点。最好发布另一个问题(如果有的话),因为这个问题已经得到了彻底的回答。最好的问候,

标签: c# arrays jagged-arrays


【解决方案1】:

您似乎正在尝试在 c# 中找到一种初始化 Jagged 数组的方法:请参考以下示例:

int[][] jaggedArray2 = new int[][] 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

同一样本的简写如下:

int[][] jaggedArray2 =
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};

您也可以分几步执行初始化:

int[][] jaggedArray = new int[3][];

jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };

而且,显然,您可以实现一种forforeach 循环,以便从某个数据结构中填充数组。更多阅读请访问:http://msdn.microsoft.com/en-us/library/2s05feca.aspx

另外,您可能应该考虑使用多维数组,例如int[,](这种情况下的 C# 语法与 Java 语言不同)。 希望这会有所帮助。

【讨论】:

  • 但是如果行或列的值很大,这种初始化类型很不方便
  • 如果您不希望数组呈锯齿状,为什么不直接使用二维数组呢?否则,您将需要使用 for 循环。
  • 我试过了,但是那样的话,我不能在C#中使用单索引来访问行数组,但是在java中它可以工作。
  • 为了您的方便,我已经用更多示例扩展了答案。您可以使用其中任何一个,具体取决于您的要求/偏好。另外,请考虑@Blorgbeard 提出的与您的案例相关的建议。最好的问候,
  • 非常感谢!最后我使用了锯齿状数组并使用 for 循环来初始化第二维
【解决方案2】:

没有您要查找的语法。

一个语句选项可以是

 int[][] arrPos = Enumerable.Range(0, length).Select(_ => new int[length]).ToArray();

【讨论】:

  • Alexei,您发布了很好的示例,但从讨论线程看来,OP 实际上是在寻找多维数组 int [,] (AFAIC,他们在 Java 中没有这种语法)。最好的问候,
  • @AlexBell - 也许......另一方面,直到 OP 编辑​​问题以匹配您的答案。随时在此示例中编辑您的答案。 (我还对你的问题添加了评论,所以 OP 可能应该提出新问题,澄清目标是什么)。
  • 是的,我同意:如果仍有任何问题,最好再发布一个。谢谢和问候,
猜你喜欢
  • 2013-07-05
  • 2012-04-24
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多