delphi - 如何获取 "for in"循环中某个项目的索引?

标签 delphi loops

以下代码可以工作,但它不像 for..in 循环那样干净/通用。

fInports: TArray<TMyClass>

for i:= low(fInPorts) to high(fInPorts) do begin
  Port:= fInPorts[i];
  Port.Left:= ARect.Left;  
  Port.Top:= ARect.Top + (Height div (NrInPorts+1)) * (i+1);
end; {for i}

for..in 循环更加清晰,但不允许我查看正在访问哪个项目。

for Port in fInPorts do begin
  Port.Left:= ARect.Left;  
  Port.Top:= ARect.Top + (Height div (NrInPorts+1)) * index;  
  //how do I get the index? -------------------------^^^^^^^
end; {for}

我如何知道 for..in 循环当前正在处理数组中的哪一项?

最佳答案

for in 循环的重点是索引不应该是相关的。这是枚举器决定返回元素的顺序。枚举器可以更改返回元素的内部顺序,并且使用它的代码仍然可以工作。控件可以按类型、名称等进行排序。显然,在数组的情况下,编译器会按顺序返回数组的元素,但对于其他枚举器则不一定是这种情况。

如果您想要索引用于定位,那么正如 Jerry 所说,您必须创建一个索引并在代码中使用它。如果它是一个 TList,您可以作弊并使用 IndexOf,但从性能的角度来看,这会适得其反。

就我个人而言,我倾向于只谨慎使用 for in 循环,但这只是因为我是老派。我是个控制狂。

关于delphi - 如何获取 "for in"循环中某个项目的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24225056/

相关文章:

delphi - 在图表上设置左轴以将十进制值增加到0.13?

delphi - 如何使用 API ReadFile() WriteFile() 进行无缓冲文件传输?

c++ - 比较 int 的正向和反向循环,其中一个限制为 0

python - 限制每个唯一 pyspark 数据帧列值返回的行,无需循环

c - 退出 Do While 循环

javascript - 如何在循环内分配多个本地存储变量?

Delphi 和 dll 版本

delphi - 在ADS中找不到与dbase III通信的正确代码页

string - Delphi中有双引号字符串函数吗?

loops - while 循环对汇编代码有 2 个条件