有許多方法排序各種類型的列表。
這裏我考慮執行.OrderBy()
和.Sort()
。
一個用作從源文件讀取數據的容器的類。
Public Class Lines
Public Property TestCase As String
Public Property Lower As Single
Public Property Upper As Single
Public Property Actual As Single
Public Property ItemDate As DateTime
End Class
創建一個列表(行),並與您的數據填充它:
編輯:設置分隔符爲逗號(CHR(44))。
Dim MyLines As New List(Of Lines)()
Dim _FirstLine() As String
Dim _line() As String
Using _reader As TextReader = New StreamReader("C:\sampleVBPrograms\SimplePlot\SomeFile.csv")
'FirstLine keeps the Header of the following data
_FirstLine = _reader.ReadLine().Split(Chr(44))
'Read the file and split using Comma as delimiter
While (_reader.Peek() >= 0)
_line = _reader.ReadLine().Split(Chr(44))
'The Date Field is parsed using the InvariatCulture Comparer
'See if this setting suits your needs
MyLines.Add(New Lines With {.TestCase = _line(0),
.Lower = CType(_line(1), Single),
.Upper = CType(_line(2), Single),
.Actual = CType(_line(3), Single),
.ItemDate = Date.Parse(_line(4), CultureInfo.InvariantCulture)})
End While
End Using
'Order the list using a verbose .OrderBy()
Dim OrderedMyLines As IOrderedEnumerable(Of Lines) =
MyLines.OrderBy(Function(t As Lines) t.ItemDate, Comparer(Of DateTime).Default)
另一種使用Sort()的方法。
我爲此使用自定義比較器。由於日期進行比較,您可能需要根據您的文化風格進行調整。
Public Class LinesComparer
Implements IComparer(Of Lines)
'Implements a Compare method for IComparer.
'See that the date evaluation differs from the one used in .OrderBy()
Public Function Compare(x As Lines, y As Lines) As Integer Implements IComparer(Of Lines).Compare
Return x.ItemDate.CompareTo(y.ItemDate)
End Function
End Class
'Sort the list using the custom Comparer
Dim LinesComp As LinesComparer = New LinesComparer()
MyLines.Sort(0, MyLines.Count, LinesComp)
編輯:
寫入文件任意的有序列表:
Using _writer As TextWriter = New StreamWriter("C:\sampleVBPrograms\SimplePlot\sorted.csv")
_writer.WriteLine(String.Join(Chr(44), _FirstLine, 0, _FirstLine.Length)
For Each Line As Lines In OrderedMyLines
_writer.WriteLine(Line.TestCase + Chr(44) +
Line.Lower.ToString + Chr(44) +
Line.Upper.ToString + Chr(44) +
Line.Actual.ToString + Chr(44) +
Line.ItemDate.ToString)
Next
End Using
所以我從所有這一切得到的唯一的事情就是你要,'排序的所有數據基於日期?你的嘗試是什麼?一種選擇,創建一個包含屬性的類來放入數據,然後你可以按照你想要的方式對它進行排序...... – Codexer
@Codexer,用我打算使用的函數編輯我的問題。我不能發佈我在這裏所做的任何事情,因爲我的代碼非常龐大 – Hari
@Hari不要發佈所有代碼,只需發佈您嘗試對您擁有的數據進行排序的代碼。這樣看來你沒有嘗試任何東西,這不是真正的工作原理。最好展示你的試驗和錯誤來幫助修復,而不是從頭開始寫。 –