C# Colecciones

Listas

Para acceder a una lista se puede usando un método, o con un indexer igual a las Arrays [].

using System.Linq;

List<string> myList = new List<string> { "Yes", "No" };

// possibility 1
var firstItem = myList.ElementAt(0);
// possibility 2
var firstItem = myList[0];

List vs ArrayList

Don’t use ArrayList. Use List<T> instead. ArrayList comes from times when C# didn’t have generics and it’s not the same ArrayList we have in Java.

Don’t do.

ArrayList array = new ArrayList();
array.Add(1);
array.Add("Pony"); // Later error at runtime if you try to operate with numbers.

How to

List<int> list = new List<int>();
list.Add(1);
list.Add("Pony"); // Compilation error. 

Stack

Colección LIFO (Last in, First Out). Pensar en una pila de platos. El último plato que ponemos es el primero en salir.

Stack pila = new Stack();
pila.Push(1);
var numero = pila.Pop();

Queue

Coleccion FIFO (First in, First Out). Pensar en una cola para un evento. El primero que llegó es el primero que entra.

Queue cola = new Queue();
cola.Enqueue(3);
var numero = cola.Dequeue();

Hashtable

Hashtable table = new Hashtable();
table.Add("Alex", 2.34);
var valor = table["Alex"];

Dictionary

Dictionaries are preferred over Hashtables as they include type safety through generics.

Dictionary<string, string> dc = new Dictionary<string,string>();
dc.Add("txt", "hello world");

string value = string.Empty;
dc.TryGetValue("txt", out valor);

string value2 = dc["txt"];

Tuples

Las tuplas nos permiten almacenar hasta 8 valores de diferentes tipos que están relacionados de algún modo, sin tener que crear nuestra propia clase.

var tupla = new Tuple<int, string, string, DateTime>(1, "Mario", "Codes", DateTime.Now);

var tupla2 = Tuple.Create(1, "Mario", "Codes", DateTime.Now);