如何检查动态数组是否为空

时间:2011-04-28 05:24:07

标签: arrays delphi

我有一个如此声明的程序:

procedure MyProc(List: Array of string);

我想知道如何检查List参数是否为空。

例如:

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;

我怎么能这样做?

3 个答案:

答案 0 :(得分:23)

您可以使用Length功能

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

答案 1 :(得分:9)

空数组等于nil

if List = nil then // it's empty

(这也意味着SetLength(List, 0)List := nil是等效的命令。)

空数组的最后一个索引小于第一个索引,对于示例中的 open array ,它意味着具有负的最后一个索引:

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

这意味着如果您想避免在空数组上运行循环,则不必执行任何特殊操作。只需像往常一样编写循环:

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

答案 2 :(得分:3)

我个人总是写

if Assigned(List) then

而不是

if List<>nil then

因为我认为它读得更好,而不仅仅是动态数组。


这回答了动态数组的问题,但您的示例是 open 数组,因此这里有两个可能的问题。

对于开放数组,我会使用Length()high()根据数组的大小做出决定。我不会被Pointer(List)<>nilLength(List)<>nil更快的论点所诱惑。这些选项之间的速度差异是不可辨别的,因此您应该使用最清晰和可读的选项。