AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi "Array" mit Strings als Indizes (Zuordnungstabelle)
Thema durchsuchen
Ansicht
Themen-Optionen

"Array" mit Strings als Indizes (Zuordnungstabelle)

Ein Thema von blackdrake · begonnen am 15. Mär 2009 · letzter Beitrag vom 27. Mär 2009
 
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#18

Re: "Array" mit Strings als Indizes (Zuordnungstab

  Alt 27. Mär 2009, 08:50
OK, hier nun mein fertiger Code:

Delphi-Quellcode:
unit ObjMan;

interface

uses
  SysUtils, IniFiles;

type
  TObjectManager = class(THashedStringList)
  private
    function GetObjectByString(const Str: String): TObject;
    procedure SetObjectByString(const Str: String; const Value: TObject);
    function GetStringByObject(const Obj: TObject): String;
    procedure SetStringByObject(const Obj: TObject; const Value: String);
  public
    function StringExists(const Str: String): boolean;
    function ObjectExists(const Obj: TObject): boolean;
    function DeleteString(const Str: String): boolean;
    property ObjectByString[const Str: string]: TObject
      read GetObjectByString write SetObjectByString;
    property StringByObject[const Obj: TObject]: String
      read GetStringByObject write SetStringByObject;
  end;

  EStringNotFound = class(Exception);
  EObjectNotFound = class(Exception);

resourcestring
  E_STRING_NOT_FOUND = 'The string "%s" was not found in the list.';
  E_OBJECT_NOT_FOUND = 'Object was not found in the list.';

implementation

{ TObjectManager } 

function TObjectManager.GetObjectByString(const Str: string): TObject;
var
  i: integer;
begin
  i := IndexOf(Str);
  if i <> -1 then
    result := Objects[i]
  else
    raise EStringNotFound.CreateFmt(E_STRING_NOT_FOUND, [Str]);
end;

procedure TObjectManager.SetObjectByString(const Str: string;
  const Value: TObject);
var
  i: integer;
begin
  i := IndexOf(Str);
  if i <> -1 then
    Objects[i] := Value
  else
    AddObject(Str, Value);
end;

function TObjectManager.StringExists(const Str: string): boolean;
begin
  result := IndexOf(Str) <> -1;
end;

function TObjectManager.ObjectExists(const Obj: TObject): boolean;
begin
  result := IndexOfObject(Obj) <> -1;
end;

function TObjectManager.DeleteString(const Str: string): boolean;
var
  i: integer;
begin
  i := IndexOf(Str);
  result := i <> -1;
  if result then Delete(i);
end;

function TObjectManager.GetStringByObject(const Obj: TObject): String;
var
  i: integer;
begin
  i := IndexOfObject(Obj);
  if i <> -1 then
    result := Strings[i]
  else
    raise EObjectNotFound.Create(E_OBJECT_NOT_FOUND);
end;

procedure TObjectManager.SetStringByObject(const Obj: TObject;
  const Value: String);
var
  i: integer;
begin
  i := IndexOfObject(Obj);
  if i <> -1 then
    Strings[i] := Value
  else
    AddObject(Value, Obj);
end;

end.
Die Exceptions bei "Verschmelzung" von Einträgen habe ich doch nicht gemacht, da ein solches Verhalten nicht nur durch Case-Sensitive entstehen kann, sondern auch, wenn man einfach zwei Einträge mit identischen Strings hinzufügt. Wenn man aber Konsequent nur mit ObjectByString[] arbeitet, kommt es zu keiner Überdeckung.

Man beachte bitte das dynamische Verhalten von SetStringByObject() und SetObjectByString(). Diese fügen einen neuen Eintrag hinzu, wenn man auf ein unbekanntes Element schreibend zugreift.

Gruß
blackdrake
Angehängte Dateien
Dateityp: pas objman_949.pas (2,4 KB, 1x aufgerufen)
Daniel Marschall
  Mit Zitat antworten Zitat
 


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 16:09 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