(急)关于自定义类型数组的排序问题
我有一个自定义类型:
Public Type TypeDef
a As String
b As String
c As String
d As String
End Type
我还有一个能对任意数组(任何类型都行)进行排序的过程
请问如何能用这个排序程序把我的一个自定义类型的数组按照数组中 a 的顺序进行排序?要求b,c,d三个元素的顺序要随 a 的变化而变化。
如 ABC(1 To 3) As TypeDef
ABC(1).a="Z"
ABC(1).b="D"
ABC(1).c="S"
ABC(2).a="F"
ABC(2).b="Z"
ABC(2).c="A"
ABC(3).a="K"
ABC(3).b="D"
ABC(3).c="F"
排序后成为:
ABC(1).a="F"
ABC(1).b="Z"
ABC(1).c="A"
ABC(2).a="K"
ABC(2).b="D"
ABC(2).c="F"
ABC(3).a="Z"
ABC(3).b="D"
ABC(3).c="S"
问题点数:50、回复次数:3Top
1 楼edyang(化石)回复于 2000-10-04 15:22:00 得分 5
好像你要为结构数组排序专门写个排序函数,或者用 C/C++ 写动态连接库来实现。Top
2 楼limengchen(LMC)回复于 2000-10-06 15:25:00 得分 45
我先将字符串转化为26进制的数字,再化成10进制,然后比较大小。下面是aru,kuh,amo的排序代码。
Private Type mine
a As String
b As String
c As String
End Type
Private Sub Command1_Click()
Dim state As Integer
Dim abc(3) As mine
Dim n(3), na(3), nb(3), nc(3) As Single
state = 0
abc(1).a = "a"
abc(1).b = "r"
abc(1).c = "u"
abc(2).a = "k"
abc(2).b = "u"
abc(2).c = "h"
abc(3).a = "a"
abc(3).b = "m"
abc(3).c = "o"
For z = 1 To 3
Select Case abc(z).a
Case "a"
na(z) = 1
Case "b"
na(z) = 2
Case "c"
na(z) = 3
Case "d"
na(z) = 4
Case "e"
na(z) = 5
Case "f"
na(z) = 6
Case "g"
na(z) = 7
Case "h"
na(z) = 8
Case "i"
na(z) = 9
Case "j"
na(z) = 10
Case "k"
na(z) = 11
Case "l"
na(z) = 12
Case "m"
na(z) = 13
Case "na"
na(z) = 14
Case "o"
na(z) = 15
Case "p"
na(z) = 16
Case "q"
na(z) = 17
Case "r"
na(z) = 18
Case "s"
na(z) = 19
Case "t"
na(z) = 20
Case "u"
na(z) = 21
Case "v"
na(z) = 22
Case "w"
na(z) = 23
Case "x"
na(z) = 24
Case "y"
na(z) = 25
Case "z"
na(z) = 26
End Select
Select Case abc(z).b
Case "a"
nb(z) = 1
Case "b"
nb(z) = 2
Case "c"
nb(z) = 3
Case "d"
nb(z) = 4
Case "e"
nb(z) = 5
Case "f"
nb(z) = 6
Case "g"
nb(z) = 7
Case "h"
nb(z) = 8
Case "i"
nb(z) = 9
Case "j"
nb(z) = 10
Case "k"
nb(z) = 11
Case "l"
nb(z) = 12
Case "m"
nb(z) = 13
Case "nb"
nb(z) = 14
Case "o"
nb(z) = 15
Case "p"
nb(z) = 16
Case "q"
nb(z) = 17
Case "r"
nb(z) = 18
Case "s"
nb(z) = 19
Case "t"
nb(z) = 20
Case "u"
nb(z) = 21
Case "v"
nb(z) = 22
Case "w"
nb(z) = 23
Case "x"
nb(z) = 24
Case "y"
nb(z) = 25
Case "z"
nb(z) = 26
End Select
Select Case abc(z).c
Case "a"
nc(z) = 1
Case "b"
nc(z) = 2
Case "c"
nc(z) = 3
Case "d"
nc(z) = 4
Case "e"
nc(z) = 5
Case "f"
nc(z) = 6
Case "g"
nc(z) = 7
Case "h"
nc(z) = 8
Case "i"
nc(z) = 9
Case "j"
nc(z) = 10
Case "k"
nc(z) = 11
Case "l"
nc(z) = 12
Case "m"
nc(z) = 13
Case "nc"
nc(z) = 14
Case "o"
nc(z) = 15
Case "p"
nc(z) = 16
Case "q"
nc(z) = 17
Case "r"
nc(z) = 18
Case "s"
nc(z) = 19
Case "t"
nc(z) = 20
Case "u"
nc(z) = 21
Case "v"
nc(z) = 22
Case "w"
nc(z) = 23
Case "x"
nc(z) = 24
Case "y"
nc(z) = 25
Case "z"
nc(z) = 26
End Select
n(z) = na(z) + nb(z) / 26 + nc(z) / 16 ^ 2
Next z
10 For z = 1 To 3
If n(z) <= n(1) And n(z) <= n(2) And n(z) <= n(3) And n(z) <> 1E+22 Then
n(z) = 1E+22
Form1.Print abc(z).a; abc(z).b; abc(z).c
state = state + 1
End If
Next z
If state <> 3 Then GoTo 10
End Sub
Top
3 楼Tenner(BE.Tenner)回复于 2000-10-06 17:34:00 得分 0
谢谢,我已经找到了更好的方法,我先将每个数组元素中的a,b,c按abc的顺序连成一个大字符串,再排序这个大字符串数组,再分离就可以了!Top




