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,但从性能的角度来看,这会产生相反的效果. 就个人而言,我倾向于只是谨慎地使用循环,但这只是因为我老了.我太过控制狂了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Embarcadero Delphi 10 Seattle Update1 v23.0.21418.4207
- golang语法总结(十六):map
- 而在主线程中调用yield,会导致 “lua: attempt to yield a
- 一共81个,开源大数据处理工具汇总(上)
- POJ-1811-Prime Test(pollard_rho模板,快速找最小素因子)
- 数据仓库工作日记_记录(二)-数据治理上
- lua 中pairs 和 ipairs区别
- vb.net – 无法将’System.Int32’类型的对象强制转换为’S
- Delphi TMediaPlayer播放音乐出现"no MCI device open&
- 检查perl中是否存在返回始终为true