VB.NET 2次元配列をソートしたい

タグの編集
投稿者 san  (社会人) 投稿日時 2024/11/11 15:55:54
VB.NETについての質問です。ご教授宜しくお願いします。
以下のような二次元配列があります。3列目のC1が同じ行をソートしたいと考えています。どうすればよいでしょうか。
A1,B1,C1,D1
A2,B2,C2,D2
A3,B3,C1,D3
A4,B4,C1,D4
A5,B5,C5,D5
A6,B6,C2,D6        
   ↓
A1,B1,C1,D1
A3,B3,C1,D3
A4,B4,C1,D4
A2,B2,C2,D2
A6,B6,C2,D6
A5,B5,C5,D5
投稿者 KOZ  (社会人) 投稿日時 2024/11/11 16:55:12
ジャグ配列なら簡単なんですけどね。

Dim jaggedArray As String()() = {
                         New String() {"A1""B1""C1""D1"},
                         New String() {"A2""B2""C2""D2"},
                         New String() {"A3""B3""C1""D3"},
                         New String() {"A4""B4""C1""D4"},
                         New String() {"A5""B5""C5""D5"},
                         New String() {"A6""B6""C2""D6"}
                    }
Array.Sort(jaggedArray, Function(x, y) String.Compare(x(2), y(2)))
For Each items In jaggedArray
    Console.WriteLine(String.Join(",", items))
Next


2次元配列は面倒くさいので書きたくないです。
投稿者 san  (社会人) 投稿日時 2024/11/12 08:11:11

KOZ様
返答ありがとうございます。2次元配列のコードも是非宜しくお願いします。。
投稿者 とくま  (社会人) 投稿日時 2024/11/12 08:23:42
KOZ さんの回答を借りて、一度ジャグ配列に入れなおして、並び替えたあと
2次元配列に入れなおせば良いだけかと。

2次元配列のままどうにかしたいなら、Compareしたときに同一行のデータも
同じように入れ替えるコードを自作する必要があります。
並べ替えのコード自体は、プログラム初級者がやる演習として色々なサイトで
紹介されているので参考にしてみてください。
投稿者 とくま  (社会人) 投稿日時 2024/11/12 17:21:06
「VB 配列 ソート」のキーワードだけで調べると、既存のSortやCompare系のメソッド等しか引っ掛からないので、
「VB 配列 ソート アルゴリズム」のキーワードで調べると、自前のコードで並び替えるような
サンプルコードに辿り着きます。

時間は掛かるが、初心者でも理解しやすいのが、バブルソート
一般的には、クイックソートが良く採用されています。
投稿者 KOZ  (社会人) 投稿日時 2024/11/15 03:04:15
検索するより AI を使ったほうが早いです。
もっとも、目的のものを引き出すには何度か会話する必要がありますけどね。

Copilot で聞いてみました。

Q:VB.NET string の2次元配列を列の3番目の要素でソートするサンプルをください
A:ジャグ配列を使った方法が紹介される

Q:ジャグ配列を使いたくありません
A:リストを使った方法が紹介される

Q:リストも使いたくありません
A:目的のコードが紹介される

Q:ありがとう!
A:どういたしまして
投稿者 とくま  (社会人) 投稿日時 2024/11/15 08:27:21
こちらでも Copilot で聞いてみました。リスト→インデックス→バブルソートでした。

リストでソートも、ちゃんと配列から入れなおして戻すコードまで書いてくれるんですね。

Q.リストを使用する方が良い理由を教えてください
A.ずらずらーっと

AIって勉強になるなぁ。