Foxtable(狐表)用户栏目专家坐堂 → [求助]集合排序问题


  共有1609人关注过本帖树形打印复制链接

主题:[求助]集合排序问题

帅哥,在线噢!
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2195 积分:18043 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]集合排序问题  发帖心情 Post By:2018/6/21 9:12:00 [只看该作者]

通过getcomboliststring获得了一个字符串,如1.2.3.10,1.2.3.1,1.2.3.9,1.4.5
然后把它们解析成为一个包括上级节点的序列如1,1.2,1.2.3,1.2.3.10,1.2.3.1,1.2.3.9,1.4,1.4.5
问题是:在排序的时候,1.2.3.10会排在1.2.3.9的前面。
如何让它正确排序?

定义了一个函数来解析字符串
Dim SourceStrs As String = Args(0)
Dim splitcode As String = Args(1)
Dim n As Integer = args(2)   '1表示得到本上级,2表示得到上级
Dim k As Byte = args(3)  '1表示输出字符串,2表示输出集合

Dim AimStr As String
Dim ls As new List(of String)

For Each ss As String In SourceStrs.Split(splitcode)
    Dim temp As String = ""
    Dim s As String() = ss.Split(".")
    For i As Integer = 0 To s.Length - n
        temp = iif(temp = "" ,s(i),temp & "." & s(i))
        If ls.Contains(temp) = False Then
            ls.Add(temp)
        End If
    Next
Next

Select Case k
    Case 1
        Dim ary As array = ls.ToArray
        array.sort(ary)                 '这里的排序,会将1.2.10排在1.2.9的前面
        AimStr = String.join(",",ary).trim(",")
        
        Return AimStr
    Case 2
        Return ls                 '集合也需要正确的排序
End Select
[此贴子已经被作者于2018/6/21 9:15:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/21 9:32:00 [只看该作者]

Dim ary1() = {"1.2.3.10", "1.2.3.1", "1.2.3.9", "1.4.5", "1.2.3.5"}
Dim ary2(ary1.length-1)
Dim ary3(ary1.length-1)

For i As Integer = 0 To ary1.length-1
    ary2(i) = i
    Dim nstr As String = ""
    For Each s As String In ary1(i).split(".")
        nstr &= format(val(s), "000") & "."
    Next
    ary3(i) = nstr.trim(".")
   
Next

array.sort(ary3, ary2)
For i As Integer = 0 To ary2.length-1
    ary3(i) = ary1(ary2(i))
    output.show(ary3(i))
Next


 回到顶部