【发布时间】:2017-02-08 08:03:10
【问题描述】:
小前言,我不是专业程序员,我其实是一个机械工程师,碰巧知道一些编程,这是我在这里的第一个问题,所以请多多包涵。为了简单起见,我只是放粗略的摘要代码而不是我的实际代码。
我在 vb.net 中有一个锯齿状数组,我用它来跟踪有多少给定的化合物正在通过每个“区域”,其中这些区域是锯齿状数组的第一个索引。我已经在其他地方初始化了数组:
jagged_arr()() = new double(4)() {}
并且总是预先设置第一个数组,例如:
jagged_arr(0) = {1, 2, 3, 4}
所以稍后我会尝试逐个区域地迭代和处理事物,本质上是:
for z = 0 to 3
if z = 2
jagged_arr(z + 1) = jagged_arr(z) 'NOTE!!!
for r = 0 to jagged_arr(z + 1).getUpperBound(0)
'more calcs
jagged_arr(z + 1)(r) += 2
next
end if
next
而不是给我我期望的数组:
{{1, 2, 3, 4},
{1, 2, 3, 4},
{3, 4, 5, 6},
{3, 4, 5, 6},
{3, 4, 5, 6}}
我得到一个这样的数组:
{{3, 2, 3, 4},
{3, 2, 3, 4},
{3, 4, 5, 6},
{3, 4, 5, 6},
{3, 4, 5, 6}}
我很困惑为什么会这样。我更困惑为什么在我用这个替换上面提到的行(用 NOTE !!!)之后它按预期工作:
jagged_array(z + 1) = new double(jagged_array(z).getUpperBound(0)) {}
for i = 0 to jagged_array(z + 1).getUpperBound(0)
jagged_array(z + 1)(i) = jagged_array(z)(i)
next
我在这里遗漏了什么吗?我不明白为什么让每个数组最初复制最后一个会导致这种奇怪的行为。任何帮助表示赞赏!
【问题讨论】:
-
数组是 .NET 中的引用类型,而不是值类型。您不是在复制数组,而是在复制对 same 数组的引用。
标签: arrays vb.net initialization jagged-arrays