Estructuras de datos
En C#, al igual que en otros lenguajes como JavaScript, tenemos estructuras de datos para almacenar y organizar información, además de métodos y funciones que nos ayudan a reutilizar código.
Un array es una colección de elementos del mismo tipo con un tamaño fijo.
Arrays en C#
Una Array es una estructura de datos que permite almacenar múltiples valores del mismo tipo en una sola variable. Es como una fila de casillas donde cada casilla tiene un número llamado índice, y se puede almacenar un dato en cada casilla.
int[] numeros = { 1, 2, 3, 4, 5 };
Console.WriteLine(numeros[0]); // Imprime: 1
En JavaScript:
let numeros = [1, 2, 3, 4, 5];
console.log(numeros[0]); // Imprime: 1
En C#, los arrays son tipados y de tamaño fijo; en JavaScript son dinámicos.
Características de un array
-
Tamaño fijo:
Una vez definido el tamaño de un array, no se puede modificar. El número de elementos que puede almacenar es fijo.
-
Tipo de dato uniforme:
Todos los elementos de un array deben ser del mismo tipo de dato, como int, string, bool, etc.
-
Acceso basado en índices:
Se puede acceder a los elementos del array mediante índices, desde 0 hasta el tamaño del array menos uno.
-
Almacenamiento contiguo:
Los elementos del array se almacenan en ubicaciones de memoria contiguas, lo que permite un acceso rápido a los elementos.
-
Capacidad de almacenamiento:
Un array puede almacenar tanto tipos de datos primitivos como objetos.
-
Inicialización:
Los arrays pueden inicializarse en el momento de la declaración o completarse posteriormente.
Ejemplo de uso
A continuación, se muestra un ejemplo básico de cómo declarar, inicializar y trabajar con un array en C#:
// Declarar e inicializar un array de enteros con 5 elementos
int[] numbers = new int[5];
// Asignar valores a cada elemento del array
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;
// Imprimir cada elemento del array mediante un bucle for
Console.WriteLine("Elementos del array:");
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
Tipos de inicialización
1. Inicialización básica:
Puede declarar e inicializar un array especificando simultáneamente el tamaño y los valores de los elementos:
int[] numbers = { 10, 20, 30, 40, 50 };
En este ejemplo, numbers es un array de enteros con 5 elementos inicializados con los valores 10, 20, 30, 40 y 50.
2. Inicialización con new:
También puede inicializar un array con la palabra clave new junto con su tamaño:
int[] numbers = new int[5];
Después de la inicialización, puede asignar valores a cada elemento del array individualmente.
3. Inicialización con tamaño implícito:
Si conoce los valores, pero no el tamaño exacto, puede omitir el tamaño y dejar que el compilador determine el tamaño de la matriz basándose en los valores proporcionados:
int[] numbers = new int[] { 10, 20, 30 };
List en C#
List<T>, donde T es el tipo de datos que contendra por ejemplo: int, string, Persona, etc.
List<string> nombres = new List<string>();
nombres.Add("Ana");
nombres.Add("Luis");
Console.WriteLine(nombres[1]); // Luis
En JavaScript:
let nombres = [];
nombres.push("Ana");
nombres.push("Luis");
console.log(nombres[1]); // Luis
En C# usamos List<T> con un tipo definido (string, int, etc.);
En JavaScript, los arrays aceptan distintos tipos sin restricciones.
ArrayList en C#
List<T> porque no es fuertemente tipada.
ArrayList datos = new ArrayList();
datos.Add(100);
datos.Add("Texto");
datos.Add(true);
foreach (var item in datos)
{
Console.WriteLine(item);
}
En JavaScript esto se parece a los arrays normales:
let datos = [100, "Texto", true];
datos.forEach(item => console.log(item));
List<T> en lugar de ArrayList.Métodos y funciones en C#
Un método es un bloque de código que realiza una tarea y puede recibir parámetros o devolver valores.
int Sumar(int a, int b)
{
return a + b;
}
Console.WriteLine(Sumar(5, 3)); // 8
En JavaScript:
function sumar(a, b) {
return a + b;
}
console.log(sumar(5, 3)); // 8
Convenciones de nomenclatura en C#
En C# se siguen ciertas convenciones de estandarización:
-
PascalCase→ para nombres de clases y métodos. Ej: CalcularPromedio, PersonaAlumno. -
camelCase→ para variables y parámetros. Ej: contador, nombreUsuario. -
UPPER_CASE→ para constantes. Ej: PI, MAX_INT.
Ejemplo aplicando convenciones:
public class Calculadora
{
public int Sumar(int numeroA, int numeroB)
{
return numeroA + numeroB;
}
}
Calculadora calc = new Calculadora();
Console.WriteLine(calc.Sumar(10, 20)); // 30
LINQ (Consulta Integrada en el Lenguaje)
es una función de C# que permite escribir consultas y manipular datos de forma más intuitiva y eficiente directamente desde el código. LINQ amplía el lenguaje C# con capacidades de consulta similares a las de SQL, integradas de forma nativa en el entorno de desarrollo.
Características de LINQ
- Consulta Integrada: LINQ permite escribir consultas directamente en C#, proporcionando una sintaxis declarativa y legible para filtrar, ordenar, agrupar y proyectar datos. Las consultas se pueden escribir con dos sintaxis principales:
- Sintaxis de consulta: Utiliza palabras clave como from, where, orderby, select, etc.
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var query = from num in numbers
where num > 2
orderby num descending
select num; - Sintaxis del método: Utiliza métodos de extensión en
IEnumerable<T>y delegados (expresiones lambda).var methodQuery = numbers.Where(num => num > 2)
.OrderByDescending(num => num); - Operaciones en colecciones: LINQ funciona con cualquier tipo de colección que implemente
IEnumerable<T>, incluyendo listas, arrays, diccionarios, conjuntos y más.
Qué no es LINQ
- No es un motor de bases de datos: Si bien LINQ permite escribir consultas similares a SQL, no es un motor de bases de datos en sí. Las consultas LINQ se ejecutan en colecciones en memoria o proveedores de datos compatibles.
- No es exclusivo de bases de datos relacionales: Aunque se usa comúnmente con bases de datos relacionales a través de Entity Framework, LINQ es independiente del origen de datos y se puede aplicar a cualquier colección compatible.
Trabajando con múltiples colecciones.
LINQ es compatible con diversas colecciones en C#, lo que lo hace extremadamente versátil y adecuado para diferentes escenarios de programación:
- array: Ejemplo de filtrado en una matriz:
int[] array = { 1, 2, 3, 4, 5 };
var result = array.Where(x => x > 2);
- List: Ejemplo de filtrado en una lista:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = numbers.Where(num => num > 2);
foreach (var num in result)
{
Console.WriteLine(num); // Salida: 3, 4, 5
} - Dictionary: Ejemplo de filtrado de un diccionario:
Dictionary<string, int> dictionary = new Dictionary<string, int>
{
{ "uno", 1 },
{ "dos", 2 },
{ "tres", 3 },
{ "cuatro", 4 },
{ "cinco", 5 }
};
var result = dictionary.Where(pair => pair.Value > 2); - Sets: Ejemplo de filtrado de un conjunto:
HashSet<int> set = new HashSet<int> { 1, 2, 3, 4, 5 };
var result = set.Where(x => x % 2 == 0);