对字符串列表进行排序

Sorting a String list

所以我创建了一个程序,它采用特定的行列表并从每一行读取 first 21 letters[Date - Time(01.02.2015 - 18:30:25)] 并将它们拆分。现在我想检查每一行并根据日期对其进行排序(从新到旧)。

我尝试了什么:我从所有日期和时间创建了一个数字,优先考虑年>月>日>小时>分钟>秒(示例:"01.02.2015 - 18:30:25" = 20150201183025)然后为程序的每一行读取它也读取上一个(从第二行开始)。

我的排序算法是:

Dim temp As String = ""
For i As Integer = 1 To Lines1.length
    If fNumber >= sNumber Then
        temp = Lines1(i - 1)
        Lines1(i - 1) = Lines1(i)
        Lines1(i) = temp
    End If
Next i

Lines1() 是我希望程序检查的字符串数组

fNumber 是行数(i-1)

sNumber 是第(i)行的编号

但我的结果是完全相同的列表,没有任何变化。

有人能帮忙吗?

为什么要尝试用自己的算法对列表进行排序?

让框架为您处理。就 convert the date information into a sane datatype (DateTime) and order it using OrderByDescending.

示例:

Dim Lines1 = {"01.02.2015 - 18:30:25",
              "01.06.2011 - 18:30:25",
              "11.02.2012 - 11:34:25",
              "01.07.2010 - 18:30:25",
              "01.01.2010 - 12:30:25"}

Dim c = System.Globalization.CultureInfo.InvariantCulture
Dim ordered = From s in Lines1
              Let dt = DateTime.ParseExact(s, "dd.MM.yyyy - HH:mm:ss", c)
              Order By dt Descending
              Select dt

ordered 现在是

这是一个方法:

Function ParseSort(fromLines As String()) As List(Of String)
    ParseSort = New List(Of String)
    Dim sortingList = New List(Of KeyValuePair(Of Date, String))

    For Each line In fromLines
        Dim toParse = line.Substring(0, 21)
        Dim dateValue = Date.ParseExact(toParse, "MM.dd.yyyy - HH:mm:ss", Nothing)
        sortingList.Add(New KeyValuePair(Of Date, String)(dateValue, line))
    Next

    sortingList.Sort(New Comparison(Of KeyValuePair(Of Date, String))(Function(x As KeyValuePair(Of Date, String),
                                                                               y As KeyValuePair(Of Date, String)) Date.Compare(x.Key, y.Key)))

    For Each pair In sortingList
        ParseSort.Add(pair.Value)
    Next
End Function

这实际上使用日期进行排序,而不是将每一行的日期字符串视为某个数字。