gpt4 book ai didi

delphi - 数组按字母顺序排序?

转载 作者:行者123 更新时间:2023-12-03 15:37:09 25 4
gpt4 key购买 nike

假设我有两个字符串数组,名为“arrayone”和“arraytwo”我将如何按照字母顺序(从 A 到 Z)对“arrayone”进行排序,同时仍然保持与第二个数组的关系。

如果您想知道“arrayone”和“arraytwo”中的内容,1 表示姓氏,2 表示每个人的年龄。我的最终结果是将其添加到 richedit 中。

场景示例:

Smith           25 
Appleseed 32
Gibbs 45

必须变成:

Appleseed       32
Gibbs 45
Smith 25

请不要使用字符串列表,将其保留在简单数组和过程中。

更新:我切换到录音。

尝试了这段代码,没有效果

for i := 0 to 26 do
for j := 0 to 26 do
if recordname.surname[j] > recordname.surname[j+1] then begin
line := recordname.surname[j];
line[j] := recordname.surname[j+1];
recordname.surname[j+1] := line;
end;

它说不兼容的类型:“Char”和“String”

最佳答案

在向您提供有关数据结构的建议并看到随之而来的困难之后,我想把事情说清楚并更清楚地解释我的意思。

您的原始代码有两个基本上未连接的数组。您可能会交换一个数组中的项目,但很容易忘记在另一个数组中这样做。在我看来,姓名/年龄对确实不应该分开。这导致以下类型声明。

type
TPerson = record
Name: string;
Age: Integer;
end;

现在您需要保存一个 TPerson 数组。

type
TPersonArray = array of TPerson;

为了执行排序,您需要能够比较两个项目并交换它们。

function Compare(const Person1, Person2: TPerson): Integer;
begin
Result := CompareText(Person1.Name, Person2.Name);
end;

procedure Swap(var Person1, Person2: TPerson);
var
temp: TPerson;
begin
temp := Person1;
Person1 := Person2;
Person2 := temp;
end;

现在我们可以用冒泡排序将所有这些放在一起。

procedure Sort(var People: TPersonArray);
var
i, n: Integer;
Swapped: Boolean;
begin
n := Length(People);
repeat
Swapped := False;
for i := 1 to n-1 do begin
if Compare(People[i-1], People[i])>0 then begin
Swap(People[i-1], People[i]);
Swapped := True;
end;
end;
dec(n);
until not Swapped;
end;

现在,如果您想使用更复杂的比较运算符,那么您只需替换 Compare 即可。例如,如果您想按年龄对同名的任何人进行排序,那么您可以使用字典比较函数。

function Compare(const Person1, Person2: TPerson): Integer;
begin
Result := CompareText(Person1.Name, Person2.Name);
if Result=0 then begin
Result := Person2.Age-Person1.Age;
end;
end;

我已经一点一点地写下了这个答案,这就是你应该如何处理像这样的更大问题。尝试将其分解为更小的部分,每个部分都是可管理的。

关于delphi - 数组按字母顺序排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com