Patrones de listas y tuplas
Desestructure colecciones
Patrones de listas y tuplas es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
Patrones de tuplas
Un patrón de tupla compara varios valores a la vez al escribirlos entre paréntesis. Cada posición se compara con su propio subpatrón.
Esto resulta ideal para decisiones que dependen de varias entradas, como una máquina de estados sencilla o un juez de piedra, papel o tijera, todo en un mismo switch.
int x = 0, y = 5;
string quadrant = (x, y) switch
{
(0, 0) => "origin",
(0, _) => "y-axis",
(_, 0) => "x-axis",
_ => "plane"
};
System.Console.WriteLine(quadrant);Un switch de tupla ejecutable
Los patrones de tuplas hacen que las tablas de decisión sean fáciles de leer. Aquí, dos valores booleanos eligen una acción.
Cada rama incluye un patrón de tupla, y el descarte _ en una posición significa que esa posición puede contener cualquier valor. La rama final _ cubre el resto de los casos.
using System;
class Program {
static string Move(bool fwd, bool turn) => (fwd, turn) switch {
(true, false) => "straight",
(true, true) => "curve",
(false, true) => "spin",
_ => "stop"
};
static void Main() => Console.WriteLine(Move(true, true));
}Vinculación dentro de tuplas
Las posiciones de un patrón de tupla pueden capturar valores. (0, var y) coincide cuando el primer elemento es 0 y vincula el segundo a y.
A continuación puede usar la variable vinculada en el resultado de la rama o en una guarda when, combinando la comparación y la extracción en un solo paso.
var point = (0, 7);
string r = point switch
{
(0, var y) => $"on y-axis at {y}",
(var x, 0) => $"on x-axis at {x}",
_ => "elsewhere"
};
System.Console.WriteLine(r);Patrones de listas
Un patrón de lista compara matrices y listas mediante sus elementos, escritos entre corchetes: [1, 2, 3]. Coincide cuando la longitud y el patrón de cada elemento concuerdan.
Introducidos en C# 11, los patrones de listas permiten ramificar directamente según la forma de una secuencia, sin comprobaciones manuales de longitud e índices.
int[] data = { 1, 2, 3 };
string shape = data switch
{
[] => "empty",
[_] => "one",
[_, _] => "two",
_ => "many"
};
System.Console.WriteLine(shape);Comparación de elementos exactos
Los patrones de listas pueden comparar valores específicos en cada posición. [1, 2, 3] solo coincide con esa secuencia exacta de tres elementos.
Combine constantes y descartes libremente: [1, _, 3] coincide con una lista de tres elementos que comienza por 1 y termina en 3, ignorando el elemento central.
using System;
class Program {
static void Main() {
int[] a = { 1, 9, 3 };
bool ok = a is [1, _, 3];
Console.WriteLine(ok);
}
}El patrón de segmento
El patrón de segmento .. compara cualquier cantidad de elementos, incluido ninguno, en una posición. Un patrón de lista puede contener como máximo un segmento.
[1, .., 9] coincide con cualquier lista que comience por 1 y termine en 9, independientemente de lo que haya entre ambos. Es ideal para comprobar el primer y el último elemento.
int[] nums = { 1, 4, 5, 9 };
string r = nums switch
{
[1, .., 9] => "1..9 bookends",
_ => "other"
};
System.Console.WriteLine(r);Captura de un segmento
El segmento puede capturar los elementos omitidos en una variable mediante var: [first, .. var rest].
La parte capturada es, a su vez, una matriz o lista del tipo comparado, lo que permite desestructurar un primer elemento y conservar el resto para procesarlo posteriormente.
using System;
class Program {
static void Main() {
int[] xs = { 10, 20, 30, 40 };
if (xs is [var head, .. var tail])
Console.WriteLine($"{head} then {tail.Length} more");
}
}Vinculación de los elementos extremos
Puede vincular ambos extremos alrededor de un segmento: [var first, .., var last] captura el primer y el último elemento e ignora los del medio.
Esto resulta conciso para secuencias en las que solo importan los límites, como al validar que una ruta comienza y termina en puntos conocidos.
using System;
class Program {
static void Main() {
string[] route = { "A", "B", "C", "D" };
if (route is [var start, .., var end])
Console.WriteLine($"{start} -> {end}");
}
}Patrones de listas con subpatrones
Cada posición de una lista puede usar cualquier patrón, incluidos los relacionales y lógicos. [> 0, > 0] coincide con una lista de dos elementos positivos.
Esto incorpora todo el conjunto de herramientas de patrones a la comparación de secuencias, de modo que puede validar tanto la forma como el contenido en una sola expresión.
int[] pair = { 3, 8 };
string r = pair switch
{
[> 0, > 0] => "both positive",
[_, _] => "mixed",
_ => "wrong size"
};
System.Console.WriteLine(r);Anidamiento de tuplas y listas
Los patrones de tuplas y listas pueden anidarse entre sí y dentro de patrones de propiedades. Una posición de tupla puede contener un patrón de lista, y viceversa.
Esto permite comparar datos estructurados complejos, como una secuencia etiquetada, en una sola expresión en lugar de realizar varias comprobaciones anidadas.
using System;
class Program {
static void Main() {
(string, int[]) record = ("primes", new[]{ 2, 3 });
string r = record switch {
("primes", [2, ..]) => "starts with 2",
_ => "other"
};
Console.WriteLine(r);
}
}Requisitos de los patrones de listas
Los patrones de listas funcionan con cualquier tipo que sea contable e indexable: necesita una propiedad Length o Count y un indexador. Las matrices, List<T> y las cadenas cumplen estos requisitos.
La captura de segmentos también necesita un método de segmento o un indexador de rangos. La mayoría de las colecciones integradas admiten ambas opciones de forma predeterminada.
string s = "cat";
bool isCat = s is ['c', 'a', 't'];
System.Console.WriteLine(isCat);Comprobación rápida
Compruebe su comprensión de los patrones de listas y tuplas.
Repaso
Los patrones de tuplas comparan varios valores entre paréntesis; los patrones de listas comparan la forma de una secuencia entre corchetes, con .. como segmento que puede capturar la parte central mediante var.
Las posiciones aceptan cualquier subpatrón y pueden anidarse libremente. Los patrones de listas necesitan un tipo contable e indexable. Ahora domina todo el conjunto de herramientas de patrones de C#.
Preguntas frecuentes
¿La lección «Patrones de listas y tuplas» es gratis?
Sí — el texto completo de «Patrones de listas y tuplas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Patrones de listas y tuplas»?
Desestructure colecciones Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Patrones de listas y tuplas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Expresiones switch
- Patrones de tipos y propiedades
- Patrones relacionales y lógicos
- Patrones de listas y tuplas