【问题标题】:Using foreach with Jagged Arrays将 foreach 与锯齿状数组一起使用
【发布时间】:2012-02-02 22:41:12
【问题描述】:
int[][] myArray = new int[10][];

foreach (int[] eachArray in myArray) {
eachArray = new int[2]
}

我相信它应该创建一个数组

{ 0 , 0 }
{0 , 0}
.........

锯齿状数组好混乱.....

【问题讨论】:

  • 对不起,我会添加更多细节
  • 在上一个问题中,您得到了带有文档的答案。在那里你会找到这个问题的答案。
  • 数组并不令人困惑..请发布一个实际问题,而不仅仅是您希望我们知道您在想什么或遇到问题的代码..谢谢
  • 锯齿状数组并没有那么令人困惑,如果您将其视为数组数组:它的行为与任何其他数组一样,但它的项也是数组...
  • 如果锯齿状数组令人困惑,请改用List<List<int>>。它还有一个优点是无需开销即可调整大小(复制到另一个数组中)。

标签: c# jagged-arrays


【解决方案1】:

这不会创建您正在寻找的锯齿状数组。它试图将一个新的int[2] 实例分配给迭代变量,而不是原始数组中的槽。这甚至不会编译,因为迭代变量被编译器视为readonly

这样做的方法是使用 for 循环

for (var i = 0; i < myArray.Length; i++) {
  myArray[i] = new int[2];
}

【讨论】:

  • 谢谢,但是我应该一直使用这种方法吗?似乎使用 for 循环对我来说非常难看......有没有更漂亮的方法来做到这一点?
  • @user1143720 for 循环是执行此操作的标准方式。可以使用完整的初始化程序来完成,但这需要内联初始化整个数组。
  • 抱歉这个愚蠢的问题。在发布下一个问题之前,我会做更多的研究。
【解决方案2】:

不允许分配给foreach 循环内的循环变量。您需要一个带有计数器的常规 for 循环,或者您可以尝试一些更花哨的东西:

int[][] myArray = Enumerable.Range(0, 10).Select(i => new int[2]).ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2015-11-13
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多