zoukankan      html  css  js  c++  java
  • 结合几个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.

  • 相关阅读:
    hashCode()相同,equals()也一定为true吗?
    什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题?
    LOJ114_k 大异或和_线性基
    BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数
    BZOJ_4184_shallot_线段树按时间分治维护线性基
    BZOJ_2844_albus就是要第一个出场_线性基
    BZOJ_3105_[cqoi2013]新Nim游戏_线性基+博弈论
    BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图
    BZOJ_3881_[Coci2015]Divljak_AC自动机+dfs序+树状数组
    BZOJ_1532_[POI2005]Kos-Dicing_二分+网络流
  • 原文地址:https://www.cnblogs.com/yehuiyan/p/14438375.html
Copyright © 2011-2022 走看看