配列のソートメソッドについて質問させていただきます。
VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。
データテーブルが格納されている配列があり、
その配列をソートしたいと思っています。
データテーブルの中に「NO」と「ID」というフィールドがあります。
NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、
条件によっては上手くいきません。
よろしければ、教えていただけないでしょうか?
また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか?
宜しくお願いいたします。
[例]
workDT() ← 元のデータテーブル配列
Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列
Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列
Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列
Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列
Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用
' IDでソート
For i = 0 To workDt.Length - 1
ID(i) = workDt(i).Rows(0).Item("ID")
Index(i) = i
Next
' 配列をIDでソート
Array.Sort(ID, Index)
' ソート後配列をテンプ配列に格納
For i = 0 To workDt.Length - 1
tmpDatatable(i) = workDt(Index(i)).Copy
Next
' NOでソート
For i = 0 To tmpDatatable.Length - 1
NO(i) = tmpDatatable(i).Rows(0).Item("NO")
Index(i) = i
Next
' 配列をNOでソート
Array.Sort(NO, Index)
' ソート後配列を格納
For i = 0 To tmpDatatable.Length - 1
Datatable(i) = tmpDatatable(Index(i)).Copy
Next
これで各配列を初期化します。
workDTに5つのデータテーブルが入っていて
workDT(0):ID=3、NO=1
workDT(0):ID=1、NO=5
workDT(0):ID=2、NO=5
workDT(0):ID=4、NO=5
workDT(0):ID=5、NO=7
(IDは重複不可設定、NOは重複可設定です。)
とした場合、NOのソートのところで変な順番になってしまいます。
Array.Sort(NO, Index)
このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか?
環境はWindowsXPSP3とVB2005です。