Estructuras de datos en .NET
Por algo lo piden gigantes tecnológicos como Apple, Microsoft y Google en sus entrevistas técnicas. Apréndelas y rómpela 🥳

Seguramente has escuchado de estructuras de datos, y si no pues quiere decir que debes meterle más ganas a la programación, sin embargo no te angusties, aquí aprenderás cuáles son las estructuras de datos en .net y la información básica de cada una de ellas.

Entonces, ¿qué son? Según la ciencia de la computación son las distintas formas que tiene una computadora de organizar y almacenar los datos para que al trabajar con ellos se haga de una forma eficiente.

Si lo piensas bien, todo lo que trabajamos con una computadora implica trabajar con datos e información, de forma que saber utilizar bien las estructuras que los contienen, es decir, las estructuras de datos, es una de las habilidades más importantes para todo desarrollador de software. Es por esto que no sorprende que las compañías tecnológicas más grandes del planeta le de una gran importancia a este tema cuando realizan sus entrevistas técnicas.

Tenemos varias estructuras de datos en la plataforma .NET aquí las veremos todas, a continuación te digo cuáles son y te explico un poco cada una de ellas:

Array

  • Es una colección de elementos homogéneos, es decir del mismo tipo
  • Alojados en una ubicación de memoria contígua, por eso son rápidos.
  • Tienen un tamaño definido desde su creación
  • Pueden tener una o más dimensiones
//Arrays
int[] misCalificaciones = { 15, 12, 19, 14, 9 };

string[] amigos = { "Mauricio", "Estefany", "Guillermo", "José", "Rosa" };

string[] misDirecciones = new string[3];
misDirecciones[0] = "Calle Los Laureles Nro.2432";
misDirecciones[1] = "Av. Armendáriz 439";
misDirecciones[2] = "Urb. El Portal grande Mz.T Lt.8";

En el código muestro las dos formas de poder declarar un array.

Documentación oficial aquí.

List

  • Tamaño dinámico, es decir puede crecer o reducirse, además no es necesario indicarle el tamaño al crear una lista
  • Es más lento que un array
  • También llamadas colecciones.
  • Tiene muchos más métodos nativos que un arreglo, lo cual lo hace más fácil de manejar y más versátil.
//Lists
List<string> misProyectos = new List<string>();
misProyectos.Add("Sistema de planillas");
misProyectos.Add("Sistema de ventas");
misProyectos.Add("Ecommerce");
misProyectos.Add("Mobile app");

var misCursos = new List<string>() { "Cálculo", "Física eléctrica" };
misCursos.Add("Ingeniería de software");
misCursos.Add("Sistemas Operativos");
misCursos.Add("Teoría general de sistemas");

Documentación oficial aquí.

Linked List

  • Conjunto de nodos relacionados entre sí
  • Cada uno de estos nodos contiene dos partes: datos(data) y dirección (address)
  • Almacena elementos en ubicaciones no contiguas
  • Elementos relacionados entre sí mediante punteros
Imagen: bravedeveloper.com
//Linked List
LinkedList<String> RankingAlumnos = new LinkedList<String>();
RankingAlumnos.AddLast("Ana");//resultará antepenúltimo
RankingAlumnos.AddLast("Jorge");//resultará penúltimo
RankingAlumnos.AddFirst("Gerson");//resultará 2do puesto
RankingAlumnos.AddLast("Nando");//resultará en el último puesto
RankingAlumnos.AddFirst("Felipe");//resultará en el 1er puesto
//Nota que los elementos están relacionados y guardan una relación de orden entre ellos según lo especifique cuando los voy añadiendo

Stack

  • También llamado pila
  • Utiliza el método LIFO (Last-in first-out) es decir el último en entrar es el primero en salir
  • Puedes imaginarte una pila como una pila de platos lavados, donde el último plato de esa pila va a ser el primero que utilices si necesitas servir una comida.
//Declaramos la pila y le añadimos elementos
var misVinos = new Stack<string>();
misVinos.Push("Rosé Santiago Queirolo");
misVinos.Push("Semi seco Tacama");
misVinos.Push("Tinto Tabernero");
misVinos.Push("Cabernet Sauvignon Terranoble");

//Trabajamos con la pila
//el último vino añadido al almacén será el primero en salir, y puedes comprobarlo iterando sus elementos:
foreach(var elemento in misVinos){
   Console.WriteLine(elemento);
}
Console.WriteLine(misVinos.Count);//4 -> Muestra el número de elementos de la pila           
Console.WriteLine(misVinos.Peek());//Cabernet Sauvignon Terranoble -> Muestra el primero de la pila
Console.WriteLine(misVinos.Pop());//Cabernet Sauvignon Terranoble -> Muestra el primero y borra
Console.WriteLine(misVinos.Peek());//Tinto Tabernero -> Ahora el primero es el tinto
Console.WriteLine(misVinos.Count);//3 -> Ahora sólo hay tres 
Console.WriteLine(String.Join(",", misVinos));//Devuelve los elementos concatenados con separador: Tinto Tabernero,Semi seco Tacama,Rosé Santiago Queirolo

En este post te explico las pilas a detalle 😉

Dictionary

  • Almacena elementos en forma de par-valor osea key-value
//Dictionary
var codigosTelefonicos = new Dictionary<string, int>();
codigosTelefonicos.Add("Peru", 51);
codigosTelefonicos.Add("Colombia", 57);
codigosTelefonicos.Add("Chile", 56);
codigosTelefonicos.Add("Argentina", 54);
//Para obtener un valor usando su key haces esto:
codigosTelefonicos["Colombia"] //Obtienes 57

Documentación oficial aquí.

Queue

  • También conocido como cola.
  • Utiliza el método FIFO (first-in first-out) es decir el primero en entrar es el primero en salir.
  • Podemos imaginar a las colas como las colas que se forman para entrar a una tienda, como las colas famosas que se hacían para comprar el último iPhone en su primer día de ventas.
//Queues
var clientesParaAtender = new Queue<string>();
clientesParaAtender.Enqueue("Coco");
clientesParaAtender.Enqueue("Marcela");
clientesParaAtender.Enqueue("Hugo");
clientesParaAtender.Enqueue("María");
clientesParaAtender.Enqueue("Juan Pablo");
//Aquí el cliente que se atendería primero sería el primero de la cola, es decir Coco.

Más información aquí.

Hash Table

  • Almacena sus elementos en forma de par-valor o key-value
  • Aplica una función hash al key para indexar el par-valor y así poder localizar y acceder a cualquier elemento de forma muy rápida.
//Hash table
Hashtable libros=new Hashtable();
libros.Add("0-7645-2641-3", "Mi libro de matematica");
libros.Add("0-7645-2641-2", "Física IV 3da edición");
libros.Add("0-7645-2641-1", "Algebra booleana");
libros.Add("0-7645-2641-7", "Algebra clásica 4ta ed.");

Más información aquí.

Hash Set

  • Colección de elementos únicos, es decir no se pueden almacenar dos elementos con el mismo valor en un mismo hashset.
  • Es rápido.
  • No tiene orden y no se puede retornar un valor mediante pasarle un índice.
//Hashset
var calificacionesValidas = new HashSet<string>();
calificacionesValidas.Add("A");
calificacionesValidas.Add("B+");
calificacionesValidas.Add("B");
calificacionesValidas.Add("C+");
calificacionesValidas.Add("C");
calificacionesValidas.Add("C");//ingresamos un valor repetido
//Ahora verificamos si almacenó el valor repetido:
Console.WriteLine(calificacionesValidas.Count);//retorna 5, lo cual confirma que no permite almacenar valores repetidos.
Console.WriteLine(calificacionesValidas.Contains("B+"));//retorna TRUE
Console.WriteLine(calificacionesValidas.Contains("Z"));//retorna FALSE

Más información aquí.

Eso es todo por ahora, aquí hemos aprendido cuáles son las estructuras de datos que tenemos a nuestra disposición en la plataforma .NET utilizando el lenguaje C#, cada lenguaje tiene sus propias estructuras de datos con ligeras variaciones, sin embargo en esencia son lo mismo, de forma que si aprendes estas estructuras en un lenguaje podrás luego aplicarlo en otro lenguaje tranquilamente, lo importante es saber cuándo y cómo utilizarlas genio 😉👌

Todo el código aquí mostrado puedes encontrarlo en mi repo.

Hey dev, ya aprendiste algo nuevo, ahora ve y disfruta de la vida allá afuera como este muchacho 😉. Foto de Evi Falshle en Unsplash

Si te ha encantado esta entrada, qué esperas para compartirla? 🥳

2 comentarios en «Estructuras de datos en .NET»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *