Para continuar con la serie de colecciones en C# vamos a ver el tipo stack dentro de c#.
Índice
1 - Qué es el tipo stack en C#?
El tipo Stack
es una colección que almacena elementos de forma LIFO (last in first out), lo que quiere decir que el último elemento que ha entrado, va a ser el primero de la lista.
Es el opuesto al tipo queue que vimos el otro día.
Para utilizarlo podemos utilizarlo con generics, utilizando stack<T>
o sin generics el cual almacena un objeto, sinceramente yo siempre lo haría con generics:
Como en las colas, podemos iterar como si fuera una lista, pero si quieres iterar, utiliza una lista.
2 - Crear un stack y añadir elementos en C#
Crear un stack
es muy sencillo, únicamente lo instanciamos e incluimos los elementos con el método .push()
.
Stack<string> marcas = new Stack<string>();
marcas.Push("Audi");
marcas.Push("Opel");
marcas.Push("BMW");
3 - Recibir elementos de un stack
Para recibir un elemento, tenemos dos opciones:
-
Pop()
el cual nos devolverá el último elemento insertado en dicho stack, y lo remueve del mismo. -
Peek()
el cual nos devuelve el elemento sin eliminarlo de la cola.
Console.WriteLine($"La última marca insertada es {marcas.Peek()}"); //BMW
Console.WriteLine($"La última marca insertada (otra vez) es {marcas.Pop()}"); //BMW
Console.WriteLine($"La penúltima marca insertada es {marcas.Pop()}"); //Opel
Si intentamos recibir un elemento pero el stack está vacío nos saltará una excepción `InvalidOperationException`
4 - Stack y colecciones en c#
Como las colas, Stack<T>
está dentro de System.Collections.Generic
e implementala interfaz IEnumerable<T>
la cual permite iterar.
foreach(string marca in marcas)
Console.WriteLine(marca);
Pero como con las colas, si vas a iterar de forma “normal(inversa)” es mejor utilizar una lista.
También podemos convertir la cola a un array, diccionario, lista, limpiarla utilizando .Clear()
, o incluso comprobar si un elemento está en el stack con .Contains(T)
.
Conclusión
En este post hemos visto cómo crear un stack en C#.
En este post hemos visto cómo operar un stack en C#.