跳转至

01 数组实用模板

一、单列数组排序

下面这段代码实现了对单列数组的排序,你只需要将数组赋值给arr变量,然后运行代码即可,提供了两种排序方式:升序和降序,你可以根据需要选择其中一种

function sortArray(arr, order)
    ' arr: 要排序的数组
    ' order: 排序方式,1表示升序,-1表示降序

    ' 检查数组是否为空
    If UBound(arr) < 0 Then
        MsgBox "数组为空,无法排序"
        Exit Function
    End If

    ' 检查排序方式是否正确
    If order <> 1 And order <> -1 Then
        MsgBox "排序方式错误,必须为1或-1"
        Exit Function
    End If

    ' 对数组进行排序
    If order = 1 Then   
        ' 升序排序
        For i = LBound(arr) To UBound(arr)
            For j = i + 1 To UBound(arr)
                If arr(i) > arr(j) Then
                    ' 交换元素
                    temp = arr(i)
                    arr(i) = arr(j)
                    arr(j) = temp
                End If
            Next j
        Next i
    Else
        ' 降序排序
        For i = LBound(arr) To UBound(arr)
            For j = i + 1 To UBound(arr)
                If arr(i) < arr(j) Then
                    ' 交换元素
                    temp = arr(i)
                    arr(i) = arr(j)
                    arr(j) = temp
                End If
            Next j
        Next i
    End If

    ' 返回排序后的数组
    sortArray = arr
End Function
  • 数组必须是单列数组,否则会导致排序错误
  • 排序方式必须为1或-1,否则会导致排序错误
  • 此方法只支持对数值型数组进行排序,不支持对字符串数组进行排序

二、多列数组排序

对于多列数组,比单列数组多一个参数,即排序的列数,你需要在调用函数时指定排序的列数,例如:

sortArray(arr, col, order)
以下是整个的函数代码:

function sortArray(arr, col, order)
    ' arr: 要排序的数组
    ' col: 排序的列数
    ' order: 排序方式,1表示升序,-1表示降序


    ' 检查数组是否为空
    If UBound(arr) < 0 Then
        MsgBox "数组为空,无法排序"
        Exit Function
    End If

    ' 检查排序方式是否正确
    If order <> 1 And order <> -1 Then
        MsgBox "排序方式错误,必须为1或-1"
        Exit Function
    End If

    ' 检查列数是否正确
    If col < 1 Or col > UBound(arr, 2) Then
        MsgBox "列数错误,必须在1到" & UBound(arr, 2) & "之间"
        Exit Function
    End If

    ' 对数组进行排序
    If order = 1 Then   
        ' 升序排序
        For i = LBound(arr) To UBound(arr)
            For j = i + 1 To UBound(arr)
                If arr(i, col) > arr(j, col) Then
                    ' 交换元素
                    For k = 1 To UBound(arr, 2)
                        temp = arr(i, k)
                        arr(i, k) = arr(j, k)
                        arr(j, k) = temp
                    Next k
                End If
            Next j
        Next i
    Else
        ' 降序排序
        For i = LBound(arr) To UBound(arr)
            For j = i + 1 To UBound(arr)
                If arr(i, col) < arr(j, col) Then
                    ' 交换元素
                    For k = 1 To UBound(arr, 2)
                        temp = arr(i, k)
                        arr(i, k) = arr(j, k)
                        arr(j, k) = temp
                    Next k
                End If
            Next j
        Next i
    End If

    ' 返回排序后的数组
    sortArray = arr
End Function
  • 数组必须是多列数组,否则会导致排序错误
  • 排序方式必须为1或-1,否则会导致排序错误
  • 此方法只支持对数值型数组进行排序,不支持对字符串数组进行排序
  • 列数必须在1到数组列数之间,否则会导致排序错误

三、单列数组去重

对于单列数组,我们可以使用以下代码实现去重:

function uniqueArray(arr)
    ' arr: 要去重的数组

    ' 检查数组是否为空
    If Not IsArray(arr) Or UBound(arr) < 0 Then
        MsgBox "数组为空或无效,无法去重"
        Exit Function
    End If

    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        dict(arr(i)) = Empty
    Next i

    ' 将字典的键转回数组
    Dim result() As Variant
    ReDim result(0 To dict.Count - 1)

    Dim key As Variant
    i = 0
    For Each key In dict.Keys
        result(i) = key
        i = i + 1
    Next key

    uniqueArray = result
End Function