对字符串列表进行排序
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
这实际上使用日期进行排序,而不是将每一行的日期字符串视为某个数字。
所以我创建了一个程序,它采用特定的行列表并从每一行读取 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
这实际上使用日期进行排序,而不是将每一行的日期字符串视为某个数字。