在Delphi中,for-in循环迭代TList时,如何高效更新列表元素?

2026-04-10 20:072阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计368个文字,预计阅读时间需要2分钟。

在Delphi中,for-in循环迭代TList时,如何高效更新列表元素?

我在Delphi中学习泛型时遇到了一个问题。我成功创建了一个整数列表,并用1000个奇数填充它。我想修改列表,使其包含所有能被3整除的数字。我认为我可以这样做。

我试图在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;

实际上这样做:

在Delphi中,for-in循环迭代TList时,如何高效更新列表元素?

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;

本文共计368个文字,预计阅读时间需要2分钟。

在Delphi中,for-in循环迭代TList时,如何高效更新列表元素?

我在Delphi中学习泛型时遇到了一个问题。我成功创建了一个整数列表,并用1000个奇数填充它。我想修改列表,使其包含所有能被3整除的数字。我认为我可以这样做。

我试图在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;

实际上这样做:

在Delphi中,for-in循环迭代TList时,如何高效更新列表元素?

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;