堆栈中元素的弹出范围

Joh*_*ohn 1 c# stack

大家好,我需要有关 Stack.Pop() 函数的一些帮助。据我所知,堆栈可以一个一个地弹出元素,但我需要多个元素来弹出。例如,我在堆栈中有 5 个元素 (4,3,2,1,0),现在我想弹出前 3 或 2 个元素,直到堆栈索引达到 1 或 2。现在我有“for”循环工作不正常:

for(var i = stack.Count - 1; i >= 0; i--)
{
    stack.Pop();
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我,让他弹出一定范围的元素吗?谢谢!

juh*_*arr 5

如果你想弹出直到堆栈达到一定大小,只需使用

while(stack.Count > desiredCount)
    stack.Pop();
Run Code Online (Sandbox Code Playgroud)

如果你想弹出一定数量的项目,那么只需使用

for(int i=0; i < numberOfItemsToPop && stack.Count > 0; i++)
    stack.Pop();
Run Code Online (Sandbox Code Playgroud)


Fin*_*ame 5

您还可以创建一个扩展方法:

public static class Extensions
{
    public static List<T> PopRange<T>(this Stack<T> stack, int amount)
    {
        var result = new List<T>(amount);
        while (amount-- > 0 && stack.Count > 0)
        {
            result.Add(stack.Pop());
        }
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在你想要的地方使用它:

var stack = new Stack<int>(new[] { 1, 2, 3, 4, 5 });

var result = stack.PopRange(3);

// result: { 5, 4, 3 }
//  stack: { 2, 1}
Run Code Online (Sandbox Code Playgroud)