10 Stimmen

Wie prüft man, ob ein dynamisches Array leer ist?

Ich habe ein Verfahren, das wie folgt erklärt wird:

procedure MyProc(List: Array of string);

Ich möchte wissen, wie ich überprüfen kann, ob die List leer ist.

Zum Beispiel:

procedure MyProc(List: Array of string);
begin
  if List=[] then // here I want to check if the List array is empty
  //do something
  else 
  //do something else
end;

Wie kann ich das tun?

25voto

RRUZ Punkte 132753

Können Sie die Length Funktion

procedure MyProc(List: Array of string);
begin
  if Length(List)=0 then // is empty ?
  //do something
  else 
  // do something else
end;

12voto

Rob Kennedy Punkte 158781

Leere Arrays sind gleichzusetzen mit nil :

if List = nil then // it's empty

(Das bedeutet auch SetLength(List, 0) y List := nil sind gleichwertige Befehle).

Leere Arrays haben einen letzten Index, der kleiner als der erste Index ist, was für die offene Anordnung in Ihrem Beispiel bedeutet, einen negativen letzten Index zu haben:

if High(List) < 0 then // it's empty

Das bedeutet, dass Sie nichts Besonderes tun müssen, wenn Sie vermeiden wollen, dass eine Schleife über ein leeres Feld läuft. Schreiben Sie die Schleife einfach so, wie Sie es normalerweise tun würden:

for i := Low(List) to High(List) do // won't run if List is empty

2voto

David Heffernan Punkte 585606

Persönlich schreibe ich immer

if Assigned(List) then

statt

if List<>nil then

weil ich glaube, dass es sich besser liest, und zwar nicht nur bei dynamischen Arrays.


Das beantwortet die Frage für ダイナミック Arrays, aber Ihr Beispiel ist ein öffnen Es gibt also zwei mögliche Fragen.

Für offene Arrays würde ich verwenden Length() ou high() um eine Entscheidung auf der Grundlage der Größe des Arrays zu treffen. Ich würde mich nicht von Argumenten verleiten lassen, die Pointer(List)<>nil ist schneller als Length(List)<>nil . Der Geschwindigkeitsunterschied zwischen diesen Optionen ist nicht erkennbar, daher sollten Sie die klarste und am besten lesbare Option wählen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X