delphi – 如何在使用for-in循环进行迭代时更新TList?
发布时间:2020-12-15 09:07:43 所属栏目:大数据 来源:网络整理
导读:我试图在Delphi中学习泛型,但是TList有一个非常基本的问题. 我已经成功创建了一个列表整数,并用1000个奇数填充它.我想更改列表中可被3整除的每个数字.我认为我可以做这样的事情. For I in Mylist DoBegin If (I mod 3)= 0 Then I:=0;End; 这显然不起作用,所
我试图在Delphi中学习泛型,但是TList有一个非常基本的问题.
我已经成功创建了一个列表整数,并用1000个奇数填充它.我想更改列表中可被3整除的每个数字.我认为我可以做这样的事情. For I in Mylist Do Begin If (I mod 3)= 0 Then I:=0; End; 这显然不起作用,所以我希望有人解释会有什么. 解决方法
您正在使用for..in循环,它使用只读枚举器.这段代码:
For I in Mylist Do Begin If (I mod 3) = 0 Then I := 0; End; 实际上这样做: Enum := Mylist.GetEnumerator; while Enum.MoveNext do Begin I := Enum.Current; If (I mod 3) = 0 Then I := 0; End; 这就是为什么你不能修改for..in循环中的列表内容.你必须使用旧式的for循环,使用TList< T> .Items []属性来访问值: For I := 0 to Mylist.Count-1 Do Begin If (Mylist[I] mod 3) = 0 Then Mylist[I] := 0; End; 更新:然后删除零,你可以这样做: For I := Mylist.Count-1 downto 0 Do Begin If Mylist[I] = 0 Then Mylist.Delete(I); End; 或者,在初始循环中执行此操作,因此您不需要第二个循环: For I := Mylist.Count-1 downto 0 Do Begin If (Mylist[I] mod 3) = 0 Then Mylist.Delete(I); End; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |