面试题答案
一键面试定义包含多个不同数据类型成员的自定义数据类型
在 Visual Basic 中,使用 Type
语句来定义自定义数据类型(也称为用户定义类型,UDT)。例如:
Type MyType
Field1 As Integer
Field2 As String
KeyField As Double '用于比较排序的关键成员
End Type
对自定义数据类型的数组进行排序
- 冒泡排序示例:
Sub BubbleSortMyTypeArray()
Dim myArray(1 To 10) As MyType
'初始化数组数据
For i = 1 To 10
myArray(i).Field1 = i
myArray(i).Field2 = "Item" & i
myArray(i).KeyField = Rnd * 100
Next i
Dim temp As MyType
Dim swapped As Boolean
For i = 1 To UBound(myArray) - 1
swapped = False
For j = 1 To UBound(myArray) - i
If myArray(j).KeyField > myArray(j + 1).KeyField Then
temp = myArray(j)
myArray(j) = myArray(j + 1)
myArray(j + 1) = temp
swapped = True
End If
Next j
If Not swapped Then Exit For
Next i
End Sub
- 使用
Collection
和Sort
方法:
Sub SortMyTypeWithCollection()
Dim col As New Collection
Dim myArray(1 To 10) As MyType
'初始化数组数据
For i = 1 To 10
myArray(i).Field1 = i
myArray(i).Field2 = "Item" & i
myArray(i).KeyField = Rnd * 100
col.Add myArray(i)
Next i
col.Sort CompareFunction:=Function(x, y) As Integer
If CType(x, MyType).KeyField < CType(y, MyType).KeyField Then
CompareFunction = -1
ElseIf CType(x, MyType).KeyField > CType(y, MyType).KeyField Then
CompareFunction = 1
Else
CompareFunction = 0
End If
End Function
'将排序后的结果放回数组
For i = 1 To col.Count
myArray(i) = CType(col(i), MyType)
Next i
End Sub
上述代码中,第一种方法使用冒泡排序算法对自定义类型数组进行排序,第二种方法通过 Collection
的 Sort
方法实现排序,并自定义了比较函数来根据关键成员 KeyField
进行排序。