Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Item eines arrays anhand eines strings? (https://www.delphipraxis.net/35355-item-eines-arrays-anhand-eines-strings.html)

Pseudemys Nelsoni 6. Dez 2004 02:14


Item eines arrays anhand eines strings?
 
Tag,

ist soetwas wie das hier:

Delphi-Quellcode:
MyArray['suchwort'].irgendwas...
möglich?

ich meine kann ich ein item eines arrays mit einem string bekommen statt mit einem ordinalen typ?
ich suche irgendwie einen weg (falls überhaupt möglich) nicht ewig schleifen dafür benutzen zu müssen

omata 6. Dez 2004 02:28

Re: Item eines arrays anhand eines strings?
 
Moin,

muss es unbedingt ein string sein? Was spricht gegen einen Aufzählungstypen?
Der ist doch dann auch aussagekräftiger.

Wenn es unbedingt ein String sein muss, würde ich eine eigene Klasse schreiben und dort über einen Property die Item-Suche-Methode realisieren.

Kannst ja nochmal etwas genauer werden.

MfG
Thorsten

dizzy 6. Dez 2004 03:00

Re: Item eines arrays anhand eines strings?
 
Über Strings indizieren!? Keine Chance. Bei ungeordneten nicht ordinalen Schlüsseln bleibt dir nichts anderes als eine lineare Suche in einer Schleife nach den Schlüsseln. Und selbst da geht's nicht über den Index, sondern der Schüssel muss in den Elementen enthalten sein.

Evtl. ist eine Liste oder gar ein Baum für dein Vorhaben geeigneter?

Gruss,
Fabian

Christian Seehase 6. Dez 2004 18:21

Re: Item eines arrays anhand eines strings?
 
Moin Pseudemys Nelsoni,

mit ein bisschen Aufwand geht's:

Delphi-Quellcode:
type
  TMyObject = class(TObject)
  end;

  TMyType = class(TObject)
  private
    FMyArray : TStringList;
    function GetMyArray(sIndex: string): TMyObject;
  public
    property MyArray[sIndex : string] : TMyObject read GetMyArray;
  end;

implementation

{$R *.DFM}

{ TMyType }

function TMyType.GetMyArray(sIndex: string): TMyObject;

var
  iIndex : integer;

begin
  Result := nil;
  iIndex := FMyArray.IndexOf(sIndex);
  if iIndex = -1 then exit;
  Result := TMyObject(FMyArray.Objects[iIndex]);
end;

dizzy 7. Dez 2004 04:57

Re: Item eines arrays anhand eines strings?
 
Zitat:

Zitat von Christian Seehase
Delphi-Quellcode:
  iIndex := FMyArray.IndexOf(sIndex);

TStingList (bzw. TStrings) macht's aber auch über eine lineare Suche:
Delphi-Quellcode:
function TStrings.IndexOf(const S: string): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then Exit;
  Result := -1;
end;
Es sei denn die Eigenschaft "Sorted" von TStringList ist "true", dann wird irgendwie was anderes gemacht (habs nicht ganz geschnallt was genau :)).

Wollte ich nur angemerkt haben -> ohne Schleife (wenn auch in der RTL versteckt) geht's nicht.

Gruss,
Fabian

jim_raynor 7. Dez 2004 06:06

Re: Item eines arrays anhand eines strings?
 
Zitat:

Zitat von dizzy
Es sei denn die Eigenschaft "Sorted" von TStringList ist "true", dann wird irgendwie was anderes gemacht (habs nicht ganz geschnallt was genau :)).

Nicht ganz korrekt. IndexOf macht immer Lineare Suche. Wenn du Sorted auf true setzt kannst du allerdings Find benutzten. Dort wird dann binär gesucht. Vielleicht hilft eine Suche bei Google nach [google]Binärsuche[/google]

dizzy 7. Dez 2004 06:33

Re: Item eines arrays anhand eines strings?
 
Zitat:

Zitat von jim_raynor
Nicht ganz korrekt. IndexOf macht immer Lineare Suche. Wenn du Sorted auf true setzt kannst du allerdings Find benutzten. Dort wird dann binär gesucht. Vielleicht hilft eine Suche bei Google nach [google]Binärsuche[/google]

Ja sag ich doch: "irgendwie was anderes" :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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