from - query en c#
¿LINQ to Objects mantiene su orden? (3)
Tengo una List<Person>
y en su lugar quiero convertirlos para un procesamiento simple a una List<string>
, haciendo lo siguiente:
List<Person> persons = GetPersonsBySeatOrder();
List<string> seatNames = persons.Select(x => x.Name).ToList();
Console.WriteLine("First in line: {0}", seatNames[0]);
¿Se garantiza que la declaración .Select()
en un objeto LINQ to Objects no cambie el orden de los miembros de la lista? Suponiendo que no se agregue un distintivo / agrupamiento / orden explícito
Además, si se usa primero una cláusula .Where()
arbitraria, ¿se garantiza que se mantenga el orden relativo o, a veces, utiliza un filtro no iterativo?
Como comentó Fermin anteriormente, esta es esencialmente una pregunta duplicada. Fallé al seleccionar las palabras clave correctas para buscar stackoverflow
Depende del tipo de colección subyacente más que nada. Podría obtener un pedido inconsistente de un HashSet, pero una Lista es segura. Incluso si el pedido que desea se proporciona de forma implícita, es mejor definir un pedido explícito si lo necesita. Parece que estás haciendo eso a juzgar por los nombres de los métodos.
En la implementación actual de .Net usa dicho código. Pero no hay garantía de que esta implementación sea en el futuro.
private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
int index = -1;
foreach (TSource source1 in source)
{
checked { ++index; }
yield return selector(source1, index);
}
}
Sí, se garantiza que Linq Select
devolverá todos sus resultados en el orden de la enumeración que se aprobó. Como la mayoría de las funciones de Linq, está completamente especificado lo que hace. A menos que se manejen los errores, este podría ser también el código para Select
:
IEnumerable<Y> Select<X, Y>(this IEnumerable<X> input, Func<X, Y> transform)
{
foreach (var x in input)
yield return transform(x);
}
Pero como señaló Samantha Branham, la colección subyacente podría no tener un orden intrínseco. He visto tablas hash que se reorganizan en la lectura.