2次元配列を複数項目でSortとReverceするには

解決


永遠の近鉄ファン  2007-12-12 21:18:11  No: 144164

VS2005(VB)の開発環境です。

以下の2次元配列があります。
Dim ForExample(,) As String = {{"1","1","平野"}, _ 
                               {"1","2","大石"}, _ 
                               {"2","1","小川"}, _ 
                               {"2","2","新井"}, _ 
                               {"2","3","水口"}, _ 
                               {"3","1","ブライアント"}, _ 
                               {"4","1","オグリビ"}, _ 
                               {"4","2","中村"}} _ 

その配列を0番目の要素では降順1番目の要素で昇順で
以下のように並び替えをしたいのです。

{"1","2","大石"}, _ 
{"1","1","平野"}, _ 
{"2","3","水口"}, _ 
{"2","2","新井"}, _ 
{"2","1","小川"}, _ 
{"3","1","ブライアント"}
{"4","2","中村"}} _ 
{"4","1","オグリビ"}, _ 
いろいろ検索してわかったことは
  1:ジャグ配列を使用すれば2次元配列のsortは1項目では可能
です。

今回知りたいことは
  1:2次元配列からジャグ配列への変換
  2:2つの項目で並び替えで1つはSortもうひとつはReverce
のコード記述方法です。

どうかよろしくお願いします。


魔界の仮面弁士  2007-12-12 21:50:36  No: 144165

データを、DataTable で管理されては如何でしょうか?
これならば、DataView の Sort プロパティを用いることで、
容易に任意の並び順にすることができますし。

'列定義
Dim table As New DataTable()
table.Columns.Add("F1", GetType(Integer))
table.Columns.Add("F2", GetType(Integer))
table.Columns.Add("Name")

'変換
For x As Integer = 0 To UBound(ForExample, 1)
    table.Rows.Add(ForExample(x, 0), ForExample(x, 1), ForExample(x, 2))
Next

'並び替え
table.DefaultView.Sort = "F1 DESC, F2 ASC"

'確認
Me.DataGridView1.DataSource = table.DefaultView


永遠の近鉄ファン  2007-12-12 23:40:43  No: 144166

魔界の仮面弁士さんありがとうございました。

並べ替え表示はできました。
ありがとうございました。

すみませんがもうひとつ質問があります。
並び替えをした順に数字を追加でつけたいのです。
つまり順位をつけたいのですが方法はあるでしょうか
並べ替えのあと
For y As Integer = 0 To table.Rows.count - 1
      table.Rows(y)(0) = y
Next
としたのですが
並び替え前の順位で数字がついてしまいます。
どうか教えて下さい。


永遠の近鉄ファン  2007-12-12 23:49:54  No: 144167

http://www.atmarkit.co.jp/fdotnet/dotnettips/363dtsort/dtsort.html
参考にできました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加