VB6动态拼接数组(将两个数组连在一起)
展开全文
既然是将两个数组合为一个,那么就会涉及到大量的数据拷贝,那么效率上来说,还是API最适合,如果是用for循环来做不知道要到猴年马月。
要用到的东西:
1.[api]CopyMemory 玩过API的都知道它了吧,用法和说明自己去百度哦
2.[api]GetTickCount 用来计算时间的
3.ReDim Preserve ReDim 是重定义数据大小,Preserve 保留数组现有数据
4.UBound 方便获取数组的大小,它得到的值始终要加1
下面贴出核心代码模块,临时做的测试,就没有取名字了:Module1.bas
[vb] 查看源代码复制打印
1.Option Explicit
2.Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
3.Public Declare Function GetTickCount Lib "kernel32" () As Long
4.
5.'求数组的大小
6.Public Function ArrayLength(argArray) As Long
7.On Error GoTo ArrayLength_Error
8.ArrayLength = UBound(argArray) + 1
9.Exit Function
10.ArrayLength_Error:
11.ArrayLength = 0
12.End Function
13.
14.'数组组合(连接在一起)
15.'argDest 目标数组,它会会变大
16.'argSource 需要将它合并到argDest
17.'argIndex argSource 的起始位置,有的时候并不是一定要从数组的第一个元素开始复制,-1表示从0开始
18.'argLength argSource 需要复制多少个元素,有时可能只需要从 argSource 中复制一小段元素,比如 0 to 10 ,可能只需要 4 to 8
19.Public Sub ArrayCombine(argDest() As Byte, argSource() As Byte, Optional argIndex As Long = -1, Optional argLength As Long = -1)
20.'argDest 或 argSource 没有成员,直接退出
21.If (ArrayLength(argDest) = 0) Then Exit Sub
22.array在vb什么意思啊If (ArrayLength(argSource) = 0) Then Exit Sub
23.
24.'argSource 起始位置
25.Dim tIndex As Long: tIndex = 0: If (argIndex > 0) Then tIndex = argIndex
26.'argSource 长度
27.Dim tLength As Long: tLength = ArrayLength(argSource)
28.If (argLength > 0) Then
29.tLength = argLength
30.Else
31.tLength = tLength - tIndex
32.End If
33.
34.Dim tDestIndex As Long: tDestIndex = ArrayLength(argDest)
35.
36.'调整 argDest 的大小 ,ReDim 是重定义数据大小,Preserve 保留数组现有数据
37.ReDim Preserve argDest(tDestIndex + tLength - 1) '数组是 从0开始的,所以要个数-1
38.
39.'开始复制数据,VarPtr 是为了得到变量的地址,数组的话,可以得到它内部元素的地址
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论