2015-04-13 3 views
0

Привет, ребята, мне нужна небольшая помощь в функции Stack.Pop(). Как я знаю, стек может вытаскивать элементы один за другим, но мне нужно больше, чем один элемент, чтобы выскочить. Например, у меня есть 5 элементов в стеке (4,3,2,1,0), и теперь я хочу вытащить первые 3 или 2 элемента, пока индекс стека не достигнет 1 или 2. к настоящему времени у меня есть цикл «для», который не работает:Поп-диапазон элементов в стеке

 for(var i = stack.Count - 1; i >= 0; i--) 
     { 
      stack.Pop(); 
     } 

Может кто-то, пожалуйста, помогите мне, чтобы он выскочил из определенного диапазона элементов? Спасибо!

+2

Если вы хотите, чтобы выскочить, пока стек не имеет только определенное количество элементов, осталось только использовать 'в то время как (stack.Count> desiredCount)'. – juharr

ответ

3

Если вы хотите, чтобы выскочить, пока стек не будет определенного размера просто использовать

while(stack.Count > desiredCount) 
    stack.Pop(); 

Если вы хотите поп определенное количество позиций, то просто используйте

for(int i=0; i < numberOfItemsToPop && stack.Count > 0; i++) 
    stack.Pop(); 
1

Вы можете сделать что-то вроде этого с помощью простой в то время как цикл:

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

var numberToPop = 3; 
while(numberToPop > 0 && stack.Count > 0) 
{ 
    numberToPop--; 
    stack.Pop(); 
} 
1

Вы также можете создать метод расширения:

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; 
    } 
} 

И использовать его там, где вы хотите:

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

var result = stack.PopRange(3); 

// result: { 5, 4, 3 } 
// stack: { 2, 1}