所以我创建了一个程序,它接受一定的行列表并从每一行读取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)中的数字
但我的结果是完全相同的列表,没有任何变化。
有人可以帮忙吗?
答案 0 :(得分:3)
为什么要尝试按自己的算法对列表进行排序?
让框架为您处理。只需convert the date information into a sane datatype(DateTime
)并使用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
现在
答案 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
这实际上是使用日期排序,而不是将每行中的日期字符串视为某个数字。