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
|