![]() |
Alternative zu Array-Konstante?
Hallo.
Ich habe eine Frage zur Optimierung meines Codes. Es sei folgender Code vorhanden:
Delphi-Quellcode:
Den Code finde ich jetzt nicht so sensationell, da ich bei einer Erweiterung/Veränderung der essentiellen Tags A, B und C die Funktion direkt bearbeiten müsste.
function EssentialTagsAvailable(Tags: string): boolean;
var ary: TStringArray; i: integer; begin result := false; ary := Explode(' ', Tags, 0); for i := 0 to Length(ary) - 1 do begin if (ary[i] = 'A') or (ary[i] = 'B') or (ary[i] = 'C') then result := true; end; end; Mir wäre es lieber, eine Konstante zu haben, die ich bearbeiten kann. Eigentlich wäre so etwas perfekt:
Delphi-Quellcode:
Sehe ich das richtig, dass die einzigste Lösung ein konstanter Array ist?
const
essentielle_tags = ['A', 'B', 'C']; // Ich weiß, dass das nicht geht :-/ function EssentialTagsAvailable(Tags: string): boolean; var ary: TStringArray; i: integer; begin result := false; ary := Explode(' ', Tags, 0); for i := 0 to Length(ary) - 1 do begin if (ary[i] in essentielle_tags) then result := true; end; end;
Delphi-Quellcode:
Mir gefällt bei dieser Lösung nicht, dass ich extra eine weitere Schleife einbauen muss, nur um meinen Code für z.B. bessere Lesbarkeit zu optimieren. Gibt es da etwas besseres?
const
essentielle_tags: array[0..2] of String = ('A', 'B', 'C'); function EssentialTagsAvailable(Tags: string): boolean; var ary: TStringArray; i, j: integer; begin result := false; ary := Explode(' ', Tags, 0); for i := 0 to Length(ary) - 1 do begin for j := 0 to length(essentielle_tags) - 1 then begin if (ary[i] = essentielle_tags[j]) then result := true; end; end; end; Gruß blackdrake |
Re: Alternative zu Array-Konstante?
Geht es hier nur um einbuchstabige Tags? Dann kannst du die Länge des Arrayeintrags mit Eins vergleichen und anschließend mit einem Set auf die Tags prüfen.
|
Re: Alternative zu Array-Konstante?
Nein, es sind Strings. A, B und C sind nur zur Demonstration. Leider gibt es keine set's für Strings, bei denen man einfach mit dem "in" Operator arbeiten könnte...
|
Re: Alternative zu Array-Konstante?
StringListe und .IndexOf()
|
Re: Alternative zu Array-Konstante?
Und wenn nicht, könntest du auch eine sorted TStringList nehmen, die im initialization-Abschnitt gefüllt wird - und dann einfach die Contains-Funktion (müsste es geben...) benutzen. Das dürfte sogar schneller sein als simples durchiterieren, gerade weil sortierte Listen binär durchsucht werden können.
|
Re: Alternative zu Array-Konstante?
Bei dem von dir gezeigten Code könnte man auf das Explode verzichten und einfach im gesamten String nach ' A ', ' B ' etc. suchen, aber vermutlich ist dein tatsächlicher Code nicht ganz so simpel.
|
Re: Alternative zu Array-Konstante?
Hallo,
bei wenigen Elementen dürfte sich eine (sortierte) TStringList nicht lohnen. Ich würde da eher zu ![]() ![]() Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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