• 结合几个delphi例子,自己写的array结构体排序,用了一天的时间才写好


    结合几个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 = record //record
    class procedure ArrayAdd(var Arr: TArray; const item: T); static; //结构中的 class 方法必须是 static 的
    end; //可能这个是type的结束号
    { TArr }

    class procedure TArr.ArrayAdd(var Arr: TArray; const item: T);
    begin
    SetLength(Arr, Length(Arr)+1);
    Arr[High(Arr)] := item;
    end;

    procedure TForm3.Button1Click(Sender: TObject);

    begin
    TArray.Sort(Values);
    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.ArrayAdd(Valuesye,rye);
    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(Valuesye, TMyRecordComparer1.Create); //之前这里出错了,是因为我把 网上的Values改成了Valuesye
    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.

  • 相关阅读:
    'try(A a = new A())' VS 'try finally'
    pom中更换阿里云仓库时不要忽略了pluginRepositories
    dubbo-spring-boot的auto-configure示例报Not found exported service的解决办法
    前后端分离部署时如何保护前端代码不被匿名访问
    拒绝一次性买卖:MyBatis的mapper和repository可重复生成工具
    关于el-dialog,我更推荐的用法
    SqlServer导入数据到MySql
    ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
    如何优化游标--使用只读游标
    多台路由器上网配置
  • 原文地址:https://www.cnblogs.com/yehuiyan/p/14438375.html
Copyright © 2020-2023  润新知