德尔福表现:案例与如果

我想可能与以前的SO问题有一些重叠,但是我找不到关于这个话题的Delphi具体问题。

假设你想检查一个无符号的32位整数变量“MyAction”是否等于ACTION1,ACTION2,…,ACTIONn中的任何一个,其中n为 – 说为1000。我猜,除了更优雅,

case MyAction of
  ACTION1: {code};
  ACTION2: {code};
  ...
  ACTIONn: {code};
end;

比快得多

if MyAction = ACTION1 then
  // code
else if MyAction = ACTION2 then
  // code
...
else if MyAction = ACTIONn then
  // code;

我猜,如果正确的动作ACTIONi具有较高的i值,那么if变量需要时间O(n)来完成(即找到正确的动作),而case变量需要更少的时间(O(1)?) 。

我正确的说,开关要快得多吗?
我正确的是,在开关案例中找到正确的动作所需的时间实际上与n无关?即是否真的需要检查百万例,而不是检查10例?
>这究竟是如何工作的?

>是的,交换机是O(1),而级联if(O)
是的,见(1)
> branch table
http://stackoverflow.com/questions/2547059/delphi-performance-case-versus-if

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:德尔福表现:案例与如果