我试图在Delphi中学习泛型,但是TList有一个非常基本的问题.
我已经成功创建了一个列表整数,并用1000个奇数填充它.我想更改列表中可被3整除的每个数字.我认为我可以做这样的事情.
For I in Mylist Do
Begin
If (I mod 3)= 0 Then
I:=0;
End;
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,所以我很感激有人解释会是什么.
您正在使用for..in循环,该循环使用只读枚举器.这段代码:
For I in Mylist Do
Begin
If (I mod 3) = 0 Then
I := 0;
End;
Run Code Online (Sandbox Code Playgroud)
实际上这样做:
Enum := Mylist.GetEnumerator;
while Enum.MoveNext do
Begin
I := Enum.Current;
If (I mod 3) = 0 Then
I := 0;
End;
Run Code Online (Sandbox Code Playgroud)
这就是为什么你不能在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;
Run Code Online (Sandbox Code Playgroud)
更新:然后删除零,你可以这样做:
For I := Mylist.Count-1 downto 0 Do
Begin
If Mylist[I] = 0 Then
Mylist.Delete(I);
End;
Run Code Online (Sandbox Code Playgroud)
或者,在初始循环中执行此操作,因此您不需要第二个循环:
For I := Mylist.Count-1 downto 0 Do
Begin
If (Mylist[I] mod 3) = 0 Then
Mylist.Delete(I);
End;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |