9 Mayıs 2013 Perşembe

Generic Listte En Büyük Nesneyi Bulmak !

Biliyorum çok boktan bir başlık oldu.
Aşağıda TKisi recordu ve TKisi recorlarından oluşan generic bir listimiz var(TKisiList).
Amacımız bu TKisiList de ki "id" değeri en büyük olan TKisi instance'ı bulmak(!).

Bunun için TKisiList sınıfına getMaxIdKisi() methodu ekleyip listenin içindeki her bir elemanın id değerini karşılaştırarak id değeri en büyük olan kişi nesnesini buluyoruz.


unit Kisi;

interface

uses
  System.Generics.Defaults,
  System.Generics.Collections;

type
  TKisi = record
    adi: string;
    soyadi: string;
    id: Integer;
  end;

  TKisiList = class(TList)
  public
    function getMaxIdKisi(): TKisi;
  end;

implementation

{ TKisiList }
function TKisiList.getMaxIdKisi: TKisi;
var
  comparer: IComparer;
  i, c: Integer;
begin
  comparer := TComparer.Default;
  c := Self.Items[0].id;
  for i := 1 to Self.Count - 1 do
  begin
    if comparer.Compare(Self[i].id, c) > 0 then
    begin
      c := Self[i].id;
      Result := Self[i];
    end;
  end;
end;

end.


var
  Form3: TForm3;

implementation

uses Kisi;

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
var
  kisi: TKisi;
  kisiList: TKisiList;

  idEnbuyukKisi:TKisi;
begin
  kisiList:=TKisiList.Create;
  kisi.id:=30;
  kisi.adi:='İSMAİL';
  kisi.soyadi:='KOCACAN';
  kisiList.Add(kisi);


  kisi.id:=20;
  kisi.adi:='KEMAL';
  kisi.soyadi:='BAYAT';
  kisiList.Add(kisi);

  kisi.id:=31;
  kisi.adi:='HAYDAR';
  kisi.soyadi:='DÜMEN';
  kisiList.Add(kisi);


  idEnbuyukKisi:=kisiList.getMaxIdKisi;
  Caption:=Format('%s %s ',[idEnbuyukKisi.adi,idEnbuyukKisi.soyadi]);
end;

Örneği(XE2) burdan indirebilirsiniz.