排序字符串列表

时间:2015-01-27 13:03:32

标签: arrays vb.net string sorting integer

所以我创建了一个程序,它接受一定的行列表并从每一行读取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)中的数字

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

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

让框架为您处理。只需convert the date information into a sane datatypeDateTime)并使用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现在

enter image description here

答案 1 :(得分:2)

这是一种方法:

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

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