循环查找并删除指定条件元素:
- program Project2;
- {$APPTYPE CONSOLE}
- uses
- SysUtils, Classes;
- var
- StrList: TStringList;
- J: Integer;
- procedure DeleteByWhile;
- var
- I: Integer;
- begin
- I := 0;
- while I<StrList.Count do
- begin
- Writeln(Format('While Loop I=%d StrList.Count=%d', [I, StrList.Count]));
- if StrList[I] = '3' then
- begin
- StrList.Delete(I);
- end;
- I := I+1;
- end;
- end;
- procedure DeleteByFor;
- var
- I: Integer;
- begin
- for I := 0 to StrList.Count - 1 do
- begin
- Writeln(Format('For Loop I=%d StrList.Count=%d', [I, StrList.Count]));
- if StrList[I] = '3' then
- begin
- StrList.Delete(I);
- end;
- end;
- end;
- begin
- try
- StrList := TStringList.Create;
- try
- for J := 0 to 10 - 1 do
- StrList.Add(IntToStr(J));
- //DeleteByWhile;
- DeleteByFor;
- finally
- StrList.Free;
- end;
- except
- on E:Exception do
- Writeln(E.Classname, ': ', E.Message);
- end;
- Sleep(300000);
- end.
调用DeleterByFor运行结果:
For Loop I=0 StrList.Count=10
For Loop I=1 StrList.Count=10
For Loop I=2 StrList.Count=10
For Loop I=3 StrList.Count=10
For Loop I=4 StrList.Count=9
For Loop I=5 StrList.Count=9
For Loop I=6 StrList.Count=9
For Loop I=7 StrList.Count=9
For Loop I=8 StrList.Count=9
For Loop I=9 StrList.Count=9
EStringListError: List index out of bounds (9)
调用DeleteByWhile运行结果:
While Loop I=0 StrList.Count=10
While Loop I=1 StrList.Count=10
While Loop I=2 StrList.Count=10
While Loop I=3 StrList.Count=10
While Loop I=4 StrList.Count=9
While Loop I=5 StrList.Count=9
While Loop I=6 StrList.Count=9
While Loop I=7 StrList.Count=9
While Loop I=8 StrList.Count=9
从上面的实例可以看出,for循环中循环最小和最大值是在一开始就确定了,在程序运行过程中不会因为其他因素的影响而改变;而while循环是每次都进行条件比较,而且是动态的读取参数的值。
如果将DeleteByFor函数改成:
- procedure DeleteByFor;
- var
- I: Integer;
- begin
- for I := StrList.Count - 1 downto 0 do
- begin
- Writeln(Format('For Loop I=%d StrList.Count=%d', [I, StrList.Count]));
- if StrList[I] = '3' then
- begin
- StrList.Delete(I);
- end;
- end;
- end;
则运行结果:
For Loop I=9 StrList.Count=10
For Loop I=8 StrList.Count=10
For Loop I=7 StrList.Count=10
For Loop I=6 StrList.Count=10
For Loop I=5 StrList.Count=10
For Loop I=4 StrList.Count=10
For Loop I=3 StrList.Count=10
For Loop I=2 StrList.Count=9
For Loop I=1 StrList.Count=9
For Loop I=0 StrList.Count=9
从上面的结果可以总结出,当我们要循环查找并且删除指定条件的元素时,一定要用while或者由大到小的for循环。否则会引起不必要的错误!