我有TStack<string>
并且我需要循环搜索值的所有项目而不删除堆栈的项目。我有Pop
和Extract
方法但他们会从堆栈中删除项目。
如何循环堆栈的所有项目并检查特定值而不删除它?
procedure test;
var
i: integer;
begin
Stack := TStack<String>.Create;
{ Push some items to the stack. }
Stack.Push('John');
Stack.Push('Mary');
Stack.Push('Bob');
Stack.Push('Anna');
Stack.Push('Erica');
for i:=0 to Stack.Count -1 do begin
item := Stack.Peek; --->How to do it
if item = 'Bob' then dosomething; ----->Here is the problem
end;
end;
答案 0 :(得分:3)
如果您发现某些代码必须在堆栈上进行迭代,那么TStack<T>
可能并不代表这类数据的最佳选择。
在任何情况下,基础元素都可以作为TArray<T>
获得。
声明一个新变量:
var
arr: TArray<string>;
使用TStack<T>
对象的ToArray
方法。
arr := Stack.ToArray;
迭代arr
数组。
for i := Low(arr) to High(arr) do
item := arr[i];
您也可以直接使用for..in
指针进行迭代,因为TStack<T>
实现了TEnumerable<T>
,所以comment中指出了这一点。
for item in Stack do
. . .