Skip to content

VBMAN.ToolsArray - 数组工具对象

概述

VBMAN.ToolsArray 提供了数组操作的实用功能,包括数组删除元素、解构赋值、切片、查找等。

方法

Remove

删除数组指定索引的元素

vb
Public Function Remove(ByRef Arr As Variant, ByVal Index As Integer) As Boolean

参数:

  • Arr - 数组(按引用传递)
  • Index - 要删除的索引

返回: True=成功, False=失败

说明:

  • 将指定索引后面的元素往前移动
  • 自动调整数组大小

示例:

vb
Dim arr(3) As String
arr(0) = "A"
arr(1) = "B"
arr(2) = "C"
arr(3) = "D"

' 删除索引 1 的元素(B)
VBMAN.ToolsArray.Remove arr, 1

' 结果: A, C, D
Debug.Print arr(0)  ' A
Debug.Print arr(1)  ' C
Debug.Print arr(2)  ' D

DeArray

解构数组到变量

vb
Public Sub DeArray(Arr As Variant, ParamArray OutVars())

参数:

  • Arr - 源数组
  • OutVars - 输出变量数组

说明:

  • 将数组元素按顺序赋值给变量
  • 变量数量不足时只赋值部分元素

示例:

vb
Dim a As String, b As String, c As String

' 解构数组
VBMAN.ToolsArray.DeArray Split("苹果/香蕉/橙子", "/"), a, b, c

Debug.Print a  ' 苹果
Debug.Print b  ' 香蕉
Debug.Print c  ' 橙子

' 只取前两个
Dim x As String, y As String
VBMAN.ToolsArray.DeArray Array(1, 2, 3, 4), x, y
Debug.Print x  ' 1
Debug.Print y  ' 2

GetIndexByValue

根据值查找索引

vb
Public Function GetIndexByValue(Arr As Variant, Value As String) As Long

参数:

  • Arr - 数组
  • Value - 要查找的值

返回: 索引值,未找到返回 -1

示例:

vb
Dim fruits(3) As String
fruits(0) = "apple"
fruits(1) = "banana"
fruits(2) = "orange"
fruits(3) = "grape"

Dim idx As Long
idx = VBMAN.ToolsArray.GetIndexByValue(fruits, "orange")
Debug.Print idx  ' 2

idx = VBMAN.ToolsArray.GetIndexByValue(fruits, "watermelon")
Debug.Print idx  ' -1

IsArrayEmpty

检查数组是否为空

vb
Public Function IsArrayEmpty(Arr As Variant) As Boolean

参数:

  • Arr - 数组

返回: True=空数组, False=非空

示例:

vb
Dim emptyArr() As String
Dim arr(1) As String
arr(0) = "test"

Debug.Print VBMAN.ToolsArray.IsArrayEmpty(emptyArr)  ' True
Debug.Print VBMAN.ToolsArray.IsArrayEmpty(arr)       ' False

IsControlArray

检查控件是否为控件数组

vb
Public Function IsControlArray(Ctl As Object) As Boolean

参数:

  • Ctl - 控件对象

返回: True=是控件数组, False=不是

示例:

vb
' 检查 Command1 是否是控件数组
If VBMAN.ToolsArray.IsControlArray(Command1) Then
    Debug.Print "Command1 是控件数组"
End If

SliceByteArray

字节数组切片

vb
Public Function SliceByteArray(ByRef Arr() As Byte, ByVal StartPos As Long, Optional ByVal EndPos As Long = -1) As Byte()

参数:

  • Arr - 字节数组
  • StartPos - 开始位置
  • EndPos - 结束位置(-1 表示到末尾)

返回: 切片后的字节数组

示例:

vb
Dim bytes(9) As Byte
' ... 填充数据

' 获取第 2-5 个字节
Dim sliced() As Byte
sliced = VBMAN.ToolsArray.SliceByteArray(bytes, 2, 5)

综合示例

示例1: 动态删除数组元素

vb
Private Sub RemoveFromArray()
    Dim items As Variant
    items = Array("苹果", "香蕉", "橙子", "葡萄")
    
    ' 删除 "香蕉"(索引 1)
    VBMAN.ToolsArray.Remove items, 1
    
    Dim i As Long
    For i = LBound(items) To UBound(items)
        Debug.Print items(i)
    Next i
    ' 输出: 苹果, 橙子, 葡萄
End Sub

示例2: 批量变量赋值

vb
Private Sub ParsePath()
    Dim path As String
    path = "C:\\Users\\Admin\\Documents\\file.txt"
    
    Dim drive As String, user As String, folder As String, file As String
    
    ' 解构路径
    VBMAN.ToolsArray.DeArray Split(path, "\\"), drive, user, folder, file
    
    Debug.Print "驱动器: " & drive   ' C:
    Debug.Print "用户: " & user      ' Users
    Debug.Print "文件夹: " & folder  ' Admin
    Debug.Print "文件: " & file      ' Documents
End Sub

示例3: 查找和删除

vb
Private Sub RemoveByValue()
    Dim items() As String
    items = Split("苹果,香蕉,橙子,葡萄", ",")
    
    ' 查找索引
    Dim idx As Long
    idx = VBMAN.ToolsArray.GetIndexByValue(items, "橙子")
    
    If idx >= 0 Then
        ' 删除找到的元素
        VBMAN.ToolsArray.Remove items, idx
        MsgBox "已删除橙子"
    Else
        MsgBox "未找到橙子"
    End If
End Sub

最佳实践

  1. 索引检查: 删除或访问数组前先检查索引有效性
  2. 解构赋值: DeArray 适合处理固定格式的数据解析
  3. 数组边界: 注意 VB6 数组可以自定义起始索引
  4. 类型匹配: GetIndexByValue 进行字符串比较,注意类型转换

VB6及其LOGO版权为微软公司所有