加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何在“for in”循环中获取项目的索引?

发布时间:2020-12-15 09:36:59 所属栏目:大数据 来源:网络整理
导读:以下代码有效,但它不像for..in循环那样干净/通用. fInports: TArrayTMyClassfor 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.
以下代码有效,但它不像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循环的整个要点是索引不应该是相关的.这是枚举器的决定,它将返回元素的顺序.枚举器可以更改元素返回的内部顺序,使用它的代码仍然可以工作.控件可以按类型,名称等进行排序.显然,在数组的情况下,编译器魔术按顺序返回数组的元素,但与其他枚举器不一定是这种情况.

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

就个人而言,我倾向于只是谨慎地使用循环,但这只是因为我老了.我太过控制狂了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读