首先,我质疑您是否选择了正确的类型来表示您的数据结构。你说你的类型是
array of array of string
但看起来内部数组总是有两个元素,第一个是整数,第二个是字符串。在这种情况下,内部数组应替换为记录。
type
TMyElement = record
ID: Integer;
Name: string;
end;
TMyArray = array of TMyElement;
现在你只有一个一维数组。我假设您对其中之一进行排序没有困难。
但是假设您确实需要一个多维数组。假设数组是参差不齐的,即不同的内部数组有不同的长度。您仍然可以将该数组视为一维数组。像这样声明它:
TStringArray = array of string;
TMyArray = array of TStringArray;
现在您可以将其排序TMyArray
为一维数组。
请注意,我需要为内部数组声明一个类型。原因是排序函数需要能够比较和交换外部数组的元素。所以你需要函数来做到这一点。你需要定义一个类型来实现它。例如,您的交换函数可能如下所示:
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;
同样,您可以使用标准数组排序来对TMyArray
.