delphi - 在 Delphi 中有效地将整数与静态整数列表进行比较?

标签 delphi delphi-xe6

类似于any way to compare an integer variable to a list of integers in if statement但是在Delphi中,如何测试整数变量是否包含在整数的静态“列表”(宽松地说 - 预定义的集合)中(可能是consts列表,或者列表if 语句中的显式值)?

现在我会做这样的事情:

if (x = 1) or
   (x = 2263) or
   (x = 263553) or
   (x = whatever_int) then
begin
  //do something;
end;

但我试图避免出现过长的条件序列。

我正在使用 Delphi XE6,因此如果有新的东西可以以干净的方式实现此目的,请告诉我。

最佳答案

您目前的方法很好。编译器将生成高效的代码。如果效率至关重要,那么您可以选择比较顺序,以便首先检查最常见的值。这需要了解输入数据的分布。

另一种语法方法是 case 语句。例如:

case x of
1, 2263, 263553, whatever_int:
  // do other stuff
end;

这会产生与 if 语句类似(事实上我怀疑是相同)的代码。但它可能更简洁、更容易阅读。在某些情况下,编译器能够生成跳转表。

如果效率对您来说至关重要,那么请确保检查编译器发出的代码、发布编译器选项并执行分析。

我确实想知道你所说的高效到底是什么意思。在编程中,该术语具有与运行时性能相关的特定含义。但我想知道您是否实际上更关心编写清晰简洁的代码,在这种情况下,高效是错误的术语。事实上,您的问题谈到避免重复的 or 运算符,这让我怀疑效率对您来说是否重要。

另一方面,如果运行时性能很重要,那么请考虑放弃代码清晰度并实现索引跳转表。但是,在没有首先确定代码是瓶颈并分析您所做的任何更改之前,切勿优化代码。

关于delphi - 在 Delphi 中有效地将整数与静态整数列表进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30212592/

相关文章:

delphi - 如何获取 TClientDataset 到另一个 TClientDataset 的更改?

delphi - 每个选项卡都有圆角的 TPageControl

delphi - 使用 Show 伪造模态对话框?

Delphi XE6 TForm.AutoSize

delphi - 如何更改Delphi XE6 IDE的字体大小

rest - Delphi RESTClient POST 请求

delphi - F2051 : Unit %s was compiled with a different version of %s

date - 如何比较 dd/mm/yyyy 格式的两个日期?

delphi - 谁在设计时绘制 TTimer?

delphi - 如何修复损坏的 Delphi 2009 安装