按字母顺序排序列表

时间:2010-08-16 17:42:37

标签: vb.net

如何根据“sTitle”按字母顺序排列生成的链接列表?我在第272行的排序功能并没有给我我需要的结果。请帮忙。

<script language="VB" runat="server">  

    Function sectionTitle(ByRef f As String)

        'Open a file for reading
        'Dim FILENAME As String = Server.MapPath("index.asp")
        Dim FILENAME As String = f

        'Get a StreamReader class that can be used to read the file
        Dim objStreamReader As StreamReader
        objStreamReader = File.OpenText(FILENAME)

        'Now, read the entire file into a string
        Dim contents As String = objStreamReader.ReadToEnd()

        'search string for <title>some words</title>     
        Dim resultText As Match = Regex.Match(contents, "(<title>(?<t>.*?)</title>)")
        'put result into new string
        Dim HtmlTitle As String = resultText.Groups("t").Value

        Return HtmlTitle

        ' If HtmlTitle <> "" Then
        'Response.Write(HtmlTitle)

        ' Else
        'Response.Write("<ul><li>b: " & contents & "</a></li></ul>")

       ' End If

    End Function


    Public Class linkItem

        Public myName As String
        Public myValue As String

        Public Sub New(ByVal myName As String, ByVal myValue As String)


            Me.myName = myName

            Me.myValue = myValue


        End Sub 'New 

    End Class 'linkItem



    Sub DirSearch(ByVal sDir As String)

        Dim d As String
        Dim f As String
        Dim mylist As New List(Of linkItem)


        Try
            For Each d In Directory.GetDirectories(sDir)
                'Response.Write("test c")

                For Each f In Directory.GetFiles("" & d & "", "index.asp")

                    'Response.Write("test a")                   
                    Dim sTitle As String = sectionTitle(f)
                    'remove wilbur wright college - from sTitle string
                    sTitle = Regex.Replace(sTitle, "My College - ", "")
                    'print section title - must come before search n replace string
                    f = Regex.Replace(f, "C:\\inetpub\\wwwroot\\mypath\\", "")
                    'add to list
                    mylist.Add(New linkItem(f, sTitle))
                    'print links as list
                    'Response.Write("<ul><li><a href='" & f & "'>" & sTitle & "</a></li></ul>")                 

                Next

        DirSearch(d)
            Next



        Catch excpt As System.Exception
    'Response.Write("test b")
            Response.Write(excpt.Message)
        End Try

        mylist.Sort(Function(p1, p2) p1.myValue.CompareTo(p2.myValue))

        mylist.ForEach(AddressOf ProcessLink)

    End Sub


    Sub ProcessLink(ByVal P As linkItem)
        If (True) Then
            Response.Write("<ul><li><a href='" & P.myName & "'>" & P.myValue & "</a></li></ul>")
        End If
    End Sub

</script>
<%     
    'Dim sDir As New DirectoryInfo(Server.MapPath(""))

    Call DirSearch((Server.MapPath("")))
%>

1 个答案:

答案 0 :(得分:2)

查看IComparable界面以获取帮助。

基本上,你需要教你的程序使用什么作为你班级的比较参考点。

IComparable允许您使用CompareTo()方法。

以下是您感兴趣的示例代码:

Public Class Temperature
    Implements IComparable

    Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
        Implements IComparable.CompareTo

        If TypeOf obj Is Temperature Then
            Dim temp As Temperature = CType(obj, Temperature)

            Return m_value.CompareTo(temp.m_value)
        End If

        Throw New ArgumentException("object is not a Temperature")
    End Function

    ' The value holder
    Protected m_value As Integer

    Public Property Value() As Integer
        Get
            Return m_value
        End Get
        Set(ByVal Value As Integer)
            m_value = Value
        End Set
    End Property

    Public Property Celsius() As Integer
        Get
            Return (m_value - 32) / 2
        End Get
        Set(ByVal Value As Integer)
            m_value = Value * 2 + 32
        End Set
    End Property
End Class