0

この単純な文字列を正しく並べ替えていません。Microsoft Framework 3.5、4.0、4.5、および 4.5.1 RC で発生することをテストしました...

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim strarray() As String = New String() _
        {"a-n|o1|2004/02/12|", _
         "an|n9|2004/02/09|", _
         "an|o2|2003/12/30|"}
    Array.Sort(strarray)
    Debug.Print(String.Join(vbNewLine, strarray))
End Sub

出力は次のとおりです。

an|n9|2004/02/09|
a-n|o1|2004/02/12|
an|o2|2003/12/30|

これは間違っています。「an」文字列は、他の 2 つの「an」文字列の間にあるべきではありません。また、最初の文字に関係なくこれが発生することも確認しました...したがって、各文字列の最初の文字を「a」の代わりに「b」または「t」に置き換えると、同じことが行われます。でも、このように弦の端を少し削ると…

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim strarray() As String = New String() _
        {"a-n|", _
         "an|", _
         "an|"}
    Array.Sort(strarray)
    Debug.Print(String.Join(vbNewLine, strarray))
End Sub

その後、出力はより正確に見え、次のようになります。

an|
an|
a-n|

文字列の配列をソートするためのより信頼できる方法はありますか? Array.Sort のこのバグ/動作により、データベースの 1 つが破損しました。

4

2 に答える 2