まず、データ構造を表現するために正しい型を選択したかどうかを質問します。あなたのタイプは
array of array of string
しかし、内側の配列には常に正確に 2 つの要素があるように見えます。最初の要素は整数で、2 番目の要素は文字列です。その場合、内側の配列をレコードに置き換える必要があります。
type
TMyElement = record
ID: Integer;
Name: string;
end;
TMyArray = array of TMyElement;
これで、1 次元配列ができました。それらのいずれかをソートするのに問題はないと思います。
しかし、多次元配列が本当に必要だったとします。配列が不規則であると仮定します。つまり、異なる内部配列が異なる長さを持っていたとします。その配列を 1 次元配列として表示することもできます。次のように宣言します。
TStringArray = array of string;
TMyArray = array of TStringArray;
TMyArray
これで、あたかも 1 次元配列であるかのように並べ替えることができます。
内部配列の型を宣言する必要があることに注意してください。その理由は、ソート関数が外側の配列の要素を比較および交換できる必要があるためです。したがって、それを行うには関数が必要です。そして、それを実現するには型を定義する必要があります。たとえば、交換関数は次のようになります。
procedure Exchange(Index1, Index2: Integer);
var
temp: TStringArray;
begin
temp := MyArray[Index1];
MyArray[Index1] := MyArray[Index2];
MyArray[Index2] := temp;
end;
を定義TStringArray
しないと、これは不可能です。これは、動的配列の代入互換性規則がかなり厳しいためです。
好きなだけ次元を拡張できます。
TString2DArray = array of TStringArray;
TMyArray = array of TString2DArray;
繰り返しますが、標準の配列ソートを使用して、この 3 次元バージョンの をソートできますTMyArray
。