AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectlst - Index eines Objektes finden

Ein Thema von scrat1979 · begonnen am 14. Feb 2010 · letzter Beitrag vom 17. Feb 2010
Antwort Antwort
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Re: TObjectlst - Index eines Objektes finden

  Alt 14. Feb 2010, 23:35
Warum nicht die Vorteile von Delphi 2010 nutzen, wenn es schon verfügbar ist. (Geht grundsätzlich auch ohne Generika.)
Delphi-Quellcode:
program Project1;

{$AppType Console}

uses
  SysUtils,
  Generics.Collections,
  Generics.Defaults;

type
  TMyObject = class
    strict private
    FValue: Integer;

    public
    property Value: Integer read FValue write FValue;
  end;

  TMyComparer = class(TComparer<TMyObject>, IComparer<TMyObject>)
    function Compare(const Left, Right: TMyObject): Integer;
  end;

  TMyObjectList = class(TObjectList<TMyObject>)
    public
    constructor Create;
    function IndexOfValue(const Value: Integer): Integer;
  end;

{ TMyComparer }

function TMyComparer.Compare(const Left, Right: TMyObject): Integer;
begin
  Result := Left.Value - Right.Value;
end;

{ TMyObjectList }

constructor TMyObjectList.Create;
begin
  inherited Create(TMyComparer.Create);
end;

function TMyObjectList.IndexOfValue(const Value: Integer): Integer;
var
  Temp: TMyObject;
begin
  Temp := TMyObject.Create;
  try
    Temp.Value := Value;
    Result := IndexOf(Temp);
  finally
    Temp.Free;
  end;
end;

{ Hauptprogramm }

var
  MyObjectList: TMyObjectList;
  MyObject: TMyObject;
  Index: Integer;
begin
  try
    MyObjectList := TMyObjectList.Create;
    try
      for Index := 9 downto 0 do
      begin
        MyObject := TMyObject.Create;
        MyObject.Value := Index;
        MyObjectList.Add(MyObject);
      end;

      for Index := -1 to 10 do
        WriteLn(Format(
          'MyObjectList.IndexOfValue(%3d) = %3d',
          [Index, MyObjectList.IndexOfValue(Index)]
        ));

      ReadLn;
    finally
      MyObjectList.Free;
    end;
  except
    on E: Exception do
      WriteLn(E.ClassName, ': ', E.Message);
  end;
end.
Code:
MyObjectList.IndexOfValue( -1) = -1
MyObjectList.IndexOfValue(  0) =  9
MyObjectList.IndexOfValue(  1) =  8
MyObjectList.IndexOfValue(  2) =  7
MyObjectList.IndexOfValue(  3) =  6
MyObjectList.IndexOfValue(  4) =  5
MyObjectList.IndexOfValue(  5) =  4
MyObjectList.IndexOfValue(  6) =  3
MyObjectList.IndexOfValue(  7) =  2
MyObjectList.IndexOfValue(  8) =  1
MyObjectList.IndexOfValue(  9) =  0
MyObjectList.IndexOfValue( 10) = -1
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz