【发布时间】:2016-08-07 17:38:35
【问题描述】:
我有一个有趣的问题。我需要用数据填充二维数组,但在填充数组之前我不知道有多少数据点。
Dim finalArray(0 to 500000, 0 to 3)
R=0
For Each index in someDictionary
If Not someDictionary.item(index)(1) = 0
finalArray(R,0) = someDictionary.item(index)(1)
finalArray(R,1) = someDictionary.item(index)(2)
finalArray(R,2) = someDictionary.item(index)(3)
R = R + 1
End If
Next index
问题是我不知道字典中有多少项,也不知道有多少项是非零的。我知道的唯一方法是在我运行循环并计数 R 之后。
目前我正在将整个 500k 行数组打印到 Excel,这通常是 100-400k 行数据,其余为空白。这很笨拙,我想将数组重新调整为正确的大小。我不能使用ReDim,因为我不能删除数据,也不能使用ReDim Preserve,因为它是二维的,我需要减少行,而不是列。
【问题讨论】:
-
以对数据进行两次传递为代价,您可以拥有一个集合集合(每行 1 个集合),然后将其转换为单个二维数组。集合在很多方面都是 VBA 中最灵活的数据结构。
-
如何将信息传递给正确大小的新数组,然后转储旧数组?
-
为什么不切换数组中行和列的位置,然后您就可以重新调整行了。
-
@Forward Ed 恐怕这需要遍历旧数组中的每个项目,这对于这么多数据来说可能代价高昂。有没有办法直接赋值?
-
@INOPIAE 这是一个有趣的想法。我可以试一试。在我打印之前有没有一种有效的方法来转置数组?