Operadores de LINQ: Element

Tabla de contenidos:

ElementAt

Con el operador ElementAt podemos extraer un elemento de una secuencia dado su índice.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Volver al operador ElementAt

ElementAt:

public static TSource ElementAt<TSource>(
	this IEnumerable<TSource> source,
	int index
)

El operador toma un int que será el índice (empezado desde 0) del elemento que queremos extraer.

Si quisieramos extraer el lenguaje Python, el índice sería el 2:

string python = lenguajes.ElementAt(2);

Lo que imprimiría:

Python

Volver a la tabla de contenidos

ElementAtOrDefault

El operador ElementAtOrDefault trabaja igual que su hermano ElementAt sólo que devolverá un valor predeterminado si no se encuentra dicho elemento.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Volver al operador ElementAtOrDefault

ElementAtOrDefault:

public static TSource ElementAtOrDefault<TSource>(
	this IEnumerable<TSource> source,
	int index
)

El operador toma un int que será el índice (empezando desde 0) del elemento a extraer. Si dicho en dicho índice no existiera un elemento, devolverá el valor por defecto del tipo.

Por ejemplo, si queremos extraer un string pero resulta que en ese índice no hay un string, devolvería el valor por defecto del tipo string. Lo mismo con cualquier otro tipo.

Así que por ejemplo:

string nada = lenguajes.ElementAtOrDefault(20);

No daría una excepción de fuera de rango, simplemente nada sería null.

Volver a la tabla de contenidos

First

El operador First devuelve el primer elemento de una secuencia.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Volver al operador First

First estándar:

public static TSource First<TSource>(
	this IEnumerable<TSource> source
)

First no toma ningún parámetro. Simplemente ejecutarlo en la secuencia en la que queramos extraer el primer elemento.

¿Queremos el primer elemento de la secuencia? Fácil:

string csharp = lenguajes.First();

Como es obvio, la salida es:

C#

Volver al operador First

First + condición:

public static TSource First<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

͉sta sobrecarga toma un delegado el cual usaremos como condición. ¿Condición para qué? Para extraer el primer elemento que cumpla dicha condición.

Por ejemplo, queremos el primer elemento de la secuencia que tenga un solo caracter. ¿No iba a ser siempre el primer elemento y ya está, no?:

string unChar = lenguajes.First(e => e.Length == 1);

¿Cual es el primer elemento de la secuencia con un solo caracter?:

C

Volver a la tabla de contenidos

FirstOrDefault

El operador FirstOrDefault devuelve el primer elemento de una secuencia o un valor predeterminado si no encuentra ningún elemento.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Una lista vacía:

List<int> listaVacia = new List<int>();

Volver al operador FirstOrDefault

FirstOrDefault estándar:

public static TSource FirstOrDefault<TSource>(
	this IEnumerable<TSource> source
)

FirstOrDefault devuelve el primer elemento de una secuencia o un valor predefinido si no hay elementos.

Por ejemplo, queremos el primer elemento de la lista vacía:

int primero = listaVacia.FirstOrDefault();

Al estar vacía, devuelve un valor predefinido. ¿Cual es el valor por defecto de los int?:

0

Volver al operador FirstOrDefault

FirstOrDefault + condición:

public static TSource FirstOrDefault<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

Ahora tenemos la posibilidad de elegir el primer elemento de una secuencia que cumpla una cierta condición. Si ningún elemento cumple dicha condición, se devolverá un valor predefinido.

Queremos el primer lenguaje de la lista con 5 caracteres:

string cinco = lenguajes.FirstOrDefault(e => e.Length == 5);

Al no existir ninguno, se devuelve el valor por defecto de los string, o sea, null

Volver a la tabla de contenidos

Last

El operador Last devuelve el último elemento de una secuencia.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Volver al operador Last

Last estándar:

public static TSource Last<TSource>(
	this IEnumerable<TSource> source
)

Last no toma ningún parámetro. Simplemente ejecutarlo en la secuencia en la que queramos extraer el último elemento.

¿Queremos el último elemento de la secuencia? Fácil:

string c = lenguajes.Last();

Como es obvio, la salida es:

C

Volver al operador Last

Last + condición:

public static TSource Last<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

͉sta sobrecarga toma un delegado el cual usaremos como condición. ¿Condición para qué? Para extraer el último elemento que cumpla dicha condición.

Por ejemplo, queremos el último elemento de la secuencia que tenga 3 o más caracteres.

string tresChar = lenguajes.Last(e => e.Length >= 3);

¿Cual es el último elemento de la secuencia con 3 o más caracteres?:

PHP

Volver a la tabla de contenidos

LastOrDefault

El operador LastOrDefault devuelve el último elemento de una secuencia o un valor predeterminado si no encuentra ningún elemento.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Una lista vacía:

List<int> listaVacia = new List<int>();

Volver al operador FirstOrDefault

LastOrDefault estándar:

public static TSource LastOrDefault<TSource>(
	this IEnumerable<TSource> source
)

LastOrDefault devuelve el último elemento de una secuencia o un valor predefinido si no hay elementos.

Por ejemplo, queremos el último elemento de la lista vacía:

int ultimo = listaVacia.LastOrDefault();

Al estar vacía, devuelve un valor predefinido. ¿Cual es el valor por defecto de los int?:

0

Volver al operador LastOrDefault

LastOrDefault + condición:

public static TSource LastOrDefault<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

Ahora tenemos la posibilidad de elegir el último elemento de una secuencia que cumpla una cierta condición. Si ningún elemento cumple dicha condición, se devolverá un valor predefinido.

Queremos el último lenguaje de la lista que empiece por Z

string zeta = lenguajes.LastOrDefault(e => e.StartsWith("Z"));

Al no existir ninguno, se devuelve el valor por defecto de los string, o sea, null

Volver a la tabla de contenidos

Single

El operador Single devuelve el único elemento de una secuencia. Si hay más de un elemento dará una excepción. Si no hay elementos también dará excepción.

Código necesario para los ejemplos:

Una lista con un solo elemento:

List<int> unEle = new List<int> {24};
[csharp]

Una lista de lenguajes:

[csharp]
List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Volver al operador Single

Single estándar:

public static TSource Single<TSource>(
	this IEnumerable<TSource> source
)

Este operador se usa sobre una secuencia que contenga un solo elemento.

Por ejemplo:

int numero = unEle.Single();

En este caso nada raro, devuelve:

24

Lo que tiene este operador es que si la lista contiene más de un elemento (o ninguno), dará una excepción.

Volver al operador Single

Single + condición:

public static TSource Single<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

Ahora podemos establecer una condición. Devolverá el elemento que cumpla dicha condición. ¡Pero atención! Si hay más de un elemento que cumpla dicha condición dará una excepción. También la dará si ninguno la cumple.

Queremos el lenguaje de 2 caracteres:

string csharp = lenguajes.Single(e => e.Length == 2);

Como solo existe uno, no tira ninguna excepción:

C#

Volver a la tabla de contenidos

SingleOrDefault

El operador SingleOrDefault devuelve el único elemento de una secuencia o un valor predeterminado si está vacía. Da una excepción si hay más de un elemento.

Código necesario para los ejemplos:

Una lista de lenguajes:

List<string> lenguajes = new List<string> {"C#", "Visual Basic", "Python", "PHP", "C"};

Una lista vacía:

List<int> listaVacia = new List<int>();

Volver al operador SingleOrDefault

SingleOrDefault estándar:

public static TSource SingleOrDefault<TSource>(
	this IEnumerable<TSource> source
)

Este operador se usa sobre una secuencia. Si esta tiene un elemento devolverá dicho elemento. En caso de que esté vacía, devolverá un valor predefinido. Si tiene más de un elemento lanzará una excepción.

Por ejemplo, queremos el valor de la lista vacía:

int vacia = listaVacia.SingleOrDefault();

Como no existe tal elemento, devolverá:

0

O sea, el valor por defecto de int.

Volver al operador SingleOrDefault

SingleOrDefault + condición:

public static TSource SingleOrDefault<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, bool> predicate
)

Este operador se usa sobre una secuencia. Devolverá el elemento que cumpla la condición especificada. En caso de no encontrar ninguno devolverá un valor predefinido. Si tiene más de un elemento que cumpla dicha condición, lanzará una excepción.

Queremos el elemento de 4 caracteres:

string cuatroChar = lenguajes.SingleOrDefault(e => e.Length == 4);

¡Ah! Que no hay… Bueno, entonces devolverá null que es el valor predefinido de los string.

Volver a la tabla de contenidos

Tags:

Un comentario

Dejar un comentario