在Delphi TStack <t>中循环并搜索值

时间:2016-02-22 12:44:39

标签: delphi stack

我有TStack<string>并且我需要循环搜索值的所有项目而不删除堆栈的项目。我有PopExtract方法但他们会从堆栈中删除项目。

如何循环堆栈的所有项目并检查特定值而不删除它?

 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;

1 个答案:

答案 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
  . . .