【发布时间】:2021-02-03 07:49:39
【问题描述】:
我的数组列表中有这种输入:
1
1.1
1.1.1
1.1.1.1
1.1.2
1.10
1.11
1.2
1.9
我想对其进行排序,得到如下所示的结果:
1
1.1
1.1.1
1.1.1.1
1.1.2
1.2
1.9
1.10
1.11
我找到了其他语言的可能解决方案,但我很难理解它们。 我有这个函数可以读取没有扩展名的文件夹的文件名,但我不知道如何排序(我试图将它们视为小数,但它不起作用)。
Function GetVersions(ByVal mypath As String) As ArrayList
Dim Versions As New ArrayList
For Each Ver As String In My.Computer.FileSystem.GetFiles(mypath)
If IsNumeric(Path.GetFileNameWithoutExtension(Ver)) Then
Versions.Add(Decimal.Parse(Path.GetFileNameWithoutExtension(Ver)).ToString("#0.00"))
End If
Next
Dim mesg As String = ""
For Each str As String In Versions
mesg = mesg & str & vbCrLf
Next
MsgBox(mesg)
Return Versions
End Function
我对 IComparer 不是很熟悉,但如果需要,我可以实现它
【问题讨论】:
-
我认为你会想要实现
IComparer,并在比较函数中,用'.'分隔。字符(即"."c),将片段解析为整数,然后从那里继续。如果您知道所有内容都将采用该格式,那么它并不是特别复杂。鉴于您声明的版本格式(多个 '.' 分隔符),您在解析为Decimal时显示的代码没有任何意义。 -
顺便说一句,除非您有充分的理由这样做(与旧版组件兼容,或者这是旧版组件),否则我建议您更喜欢
List(Of String)而不是ArrayList。 -
可能有多少个周期?每个位置的数字范围是多少?
-
@dbasnett 我认为有 4 个句点,每个位置的数字范围是什么意思
-
@Craig 你有任何代码示例来说明你告诉我的内容吗?
标签: vb.net sorting arraylist version icomparer