VB6:重新调整二维动态数组的大小

3
我正在使用数组来存储蒸汽的属性,根据其压力进行分类。目前我有9个压力的属性,因此我使用静态数组。我想要更具灵活性,所以我想切换到动态数组。
当我在循环中使用ReDim foo(1 to i, 1 to 10)时,我会完全失去除最后一行外的所有数据。
当我使用ReDim Preserve foo(1 to i, 1 to 10)ReDim Preserve(i,10)时,程序会抛出"Runtime error '9': subscript out of range"的错误。其中i的值从1到9。
如何在不丢失数据的情况下向充满数据的数组添加行/列?

你的数组为什么是二维的?存储蒸汽与压力的属性听起来像是几个一维数组,或者可能是一个用户定义类型或类的单个一维数组。 - MarkJ
1个回答

7
您只能在VB6多维数组中保留最后一个维度。以下是来自MSDN的信息:
如果您包含Preserve关键字,则Visual Basic会将元素从现有数组复制到新数组中。当您使用Preserve时,只能调整数组的最后一个维度,对于每个其他维度,您必须指定与现有数组中相同的大小。
例如,如果您的数组只有一个维度,则可以调整该维度的大小并仍保留数组的内容,因为它是最后且唯一的维度。但是,如果您的数组具有两个或更多维度,则只能改变最后一个维度的大小,如果您使用Preserve,则会保留数据。
以下示例增加了动态数组的最后一个维度的大小,而不会丢失数组中的任何现有数据,然后缩小大小并部分数据丢失:
 Dim IntArray(10, 10, 10) As Integer 
 ReDim Preserve IntArray(10, 10, 20) 
 ReDim Preserve IntArray(10, 10, 15)

那么 ReDim Preserve IntArray(20, 10, 10) 将会失败,只有 ReDim Preserve IntArray(10, 10, 20) 才能正常工作,对吗? - Crowley
谢谢。我得弯曲不同的分支 :) - Crowley
这里是引用MSDN文档的链接:http://msdn.microsoft.com/en-us/library/aa266231(v=VS.60).aspx。+1 - MarkJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接