扩展/合并VB数组

时间:2008-09-16 21:35:31

标签: arrays vba concatenation

我有一个带有公共字节数组的类。让我们说吧

Public myBuff as byte()

类中的事件以字节数组的形式获取数据块。我如何告诉事件代码在最后粘贴get块?让我们说

Private Sub GetChunk
  Dim chunk as byte
  '... get stuff in chunk
  Me.myBuff += chunk '(stick chunk on end of public array)
End sub

或者我完全忽略了这一点?

5 个答案:

答案 0 :(得分:1)

如果我没记错的话,在vb中你想要使用preserve来重新生成数组。

答案 1 :(得分:1)

如果数组很小,并且不经常添加新数据,那么最简单的方法是:

public BufferSize as long 'or you can just use Ubound(mybuff), I prefer a tracker var tho
public MyBuff

private sub GetChunk()
dim chunk as byte
'get stuff
BufferSize=BufferSize+1

redim preserve MyBuff(buffersize)
mybuff(buffersize) = chunk
end sub

如果chunk是一个字节数组,它看起来更像是:

buffersize=buffersize+ubound(chunk) 'or if it's a fixed-size chunk, just use that number
redim preserve mybuff(buffersize)
for k%=0 to ubound(chunk) 'copy new information to buffersize
  mybuff(k%+buffersize-ubound(chunk))=chunk(k%)
next

如果您经常这样做(比方说,每秒多次),您会想要像StringBuilder类一样工作:

public BufSize&,BufAlloc& 'initialize bufalloc to 1 or a number >= bufsize
public MyBuff() as byte

sub getdata()
bufsize=bufsize+ubound(chunk)
if bufsize>bufalloc then
  bufalloc=bufalloc*2
  redim preserve mybuff(bufalloc)
end if
for k%=0 to ubound(chunk) 'copy new information to buffersize
  mybuff(k%+bufsize-ubound(chunk))=chunk(k%)
next
end sub

每次指针通过缓冲区末尾时,基本上会将分配给mybuf的内存加倍。这意味着更少的内存改变。

答案 2 :(得分:0)

您将不断使用ReDim关键字,非常效率低下。

你在使用.Net吗?如果是这样,请考虑使用System.Collections.Generic.List(Of Byte)。您可以使用它的.AddRange()方法来附加您的字节,如果您确实需要,可以使用.ToArray()方法来取回数组。

答案 3 :(得分:0)

您的问题似乎不太清楚。您可能不应该将字节数组作为公共字节。它应该是私有的,你应该提供一组公共函数,允许类的用户对数组执行操作。

答案 4 :(得分:0)

我认为你可能正在寻找除数组之外的东西。如果您尝试逐步扩展数据量,则应使用动态数据结构,例如ArrayList。这有一个Add方法,可以将特定对象或值添加到数组中,而无需考虑空间。它还有一个漂亮的ToArray()方法,您可以使用它。

如果您出于特定原因(性能,我猜)尝试使用数组,请使用ReDim Preserve array(newSize)