MST
星途 面试题库

面试题:Visual Basic 自定义数据类型的应用

请描述在 Visual Basic 中如何定义一个包含多个不同数据类型成员的自定义数据类型,并说明如何对自定义数据类型的数组进行排序,假设自定义数据类型中有一个可用于比较排序的关键成员。
28.1万 热度难度
编程语言Visual Basic

知识考点

AI 面试

面试题答案

一键面试

定义包含多个不同数据类型成员的自定义数据类型

在 Visual Basic 中,使用 Type 语句来定义自定义数据类型(也称为用户定义类型,UDT)。例如:

Type MyType
    Field1 As Integer
    Field2 As String
    KeyField As Double '用于比较排序的关键成员
End Type

对自定义数据类型的数组进行排序

  1. 冒泡排序示例
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
  1. 使用 CollectionSort 方法
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

上述代码中,第一种方法使用冒泡排序算法对自定义类型数组进行排序,第二种方法通过 CollectionSort 方法实现排序,并自定义了比较函数来根据关键成员 KeyField 进行排序。