Tengo una lista con algunos identificadores como este:
List<long> docIds = new List<long>() { 6, 1, 4, 7, 2 };
Además, tengo otra lista de <T>elementos, que están representados por los identificadores descritos anteriormente.
List<T> docs = GetDocsFromDb(...)
Necesito mantener el mismo orden en ambas colecciones, de modo que los elementos en List<T>deben estar en la misma posición que en la primera (debido a razones de puntuación del motor de búsqueda). Y este proceso no se puede hacer en la GetDocsFromDb()función.
Si es necesario, es posible cambiar la segunda lista a otra estructura ( Dictionary<long, T>por ejemplo), pero preferiría no cambiarla.
¿Hay alguna forma simple y eficiente de hacer esta "orden según algunas ID" con LINQ?
c#
linq
sorting
collections
Borja López
fuente
fuente

docIdocurre exactamente una vezdocs, qué propiedad contendráIdo se requerirá un selectorFunc<T, long>?Respuestas:
fuente
Id. No se especifica en la pregunta.IndexOfes perfectamente aceptable para su ejemplo y agradable y simple. Si tuviera muchos datos, mi respuesta podría ser más adecuada. stackoverflow.com/questions/3663014/…Como no especificas
T,Es una extensión genérica para lo que quieres.
Podrías usar la extensión como esta quizás,
Una versión más segura podría ser
que funcionará si
sourceno se comprime exactamente conorder.fuente
La respuesta de Jodrell es la mejor, pero en realidad se volvió a implementar
System.Linq.Enumerable.Join. Join también usa Lookup y sigue ordenando la fuente.fuente
Un enfoque simple es comprimir con la secuencia de pedido:
fuente
Zipcombina cada índice (en una Tupla) con el documento en la misma posición en la lista correspondiente. Luego, OrderBy clasifica las Tuplas por la parte del índice y luego la selección excava nuestros documentos de la lista ahora ordenada.Item1no está relacionadoItem2.