结合几个delphi例子,自己写的array结构体排序,用了一天的时间才写好
unit Unit3;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,types;
type
TForm3 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
uses
System.Generics.Collections, System.Generics.Defaults;
var
Values: array[0..3] of string =( 'Carol' ,'Bob', 'Alice', 'Dave'); //为什么不能把这句放在button.click里面
S: string;
//记录用于示例代码。
type
TMyRecord = record
I: Integer;
S: string;
end;
//按TMYRECORD的I字段递增顺序排序的示例
//比较类,以降序对TMyRecord的I字段进行排序
type
TMyRecordComparer1 = class(TComparer
public
function Compare(const Left, Right: TMyRecord): Integer; override;
end;
function TMyRecordComparer1.Compare(const Left, Right: TMyRecord): Integer;
begin
Result := (Left.I - Right.I ); //Left.I,Right.I交换位置,排序的结果也就不一样
end;
//样例程序
var
Valuesye: array of TMyRecord ;
R: TMyRecord;
rye:TMyRecord;
type //这里不能少了ytpe
TArr
class procedure ArrayAdd(var Arr: TArray
end; //可能这个是type的结束号
{ TArr
class procedure TArr
begin
SetLength(Arr, Length(Arr)+1);
Arr[High(Arr)] := item;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
TArray.Sort
for S in Values do
Memo1.Lines.Add(S);
end;
procedure TForm3.Button2Click(Sender: TObject);
var
chen:TArr
begin
rye.I:=0;
rye.S:='叶会严';
//TArr
FillChar(Valuesye,sizeof(Valuesye),0); //这里清空缓存数据,生成 p.ScoreList=()
setlength(Valuesye,2); //设置数组的长度
//这种方法得到:p.ScoreList=((course='数学';score=78.5),(course='语文';score=70)) 采用截断模式
Valuesye[0].s:='语文';
Valuesye[0].i:=3;
Valuesye[1].s:='数学';
Valuesye[1].i:=2;
SetLength(Valuesye, Length(Valuesye)+1);
Valuesye[High(Valuesye)] := rye;
TArray.Sort
for R in Valuesye do //之前这里出错了,是因为我把网上的 Values改成了Valuesye
Memo1.Lines.Add(Format('%d:%s', [R.I, R.S]));
ShowMessageFmt('%d,%s', [Valuesye[0].i, Valuesye[0].s]); //abc,123
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
FillChar(Valuesye,sizeof(Valuesye),0); //这里清空缓存数据,生成 p.ScoreList=()
setlength(Valuesye,2);
//这种方法得到:p.ScoreList=((course='数学';score=78.5),(course='语文';score=70)) 采用截断模式
Valuesye[0].s:='语文';
Valuesye[0].i:=3;
Valuesye[1].s:='数学';
Valuesye[1].i:=2;
end;
end.