У меня есть список с некоторыми идентификаторами, как это:
List<long> docIds = new List<long>() { 6, 1, 4, 7, 2 };
Более того, у меня есть еще один список <T>
предметов, которые представлены идентификаторами, описанными выше.
List<T> docs = GetDocsFromDb(...)
Мне нужно сохранить одинаковый порядок в обеих коллекциях, чтобы элементы в List<T>
должны быть в том же положении, что и в первом (из-за причин оценки поисковой системой). И этот процесс не может быть выполнен в GetDocsFromDb()
функции.
При необходимости можно изменить второй список в другую структуру (Dictionary<long, T>
например, ), но я бы предпочел не менять его.
Есть ли простой и эффективный способ сделать это «расположение в зависимости от некоторых идентификаторов» с помощью LINQ?
c#
linq
sorting
collections
Борха Лопес
источник
источник
docId
происходит ровно один разdocs
, какое свойство будет содержатьId
или потребуется селекторFunc<T, long>
?Ответы:
источник
Id
. Это не указано в вопросе.IndexOf
вполне приемлемо для вашего примера и красиво и просто. Если у вас много данных, мой ответ может быть лучше. stackoverflow.com/questions/3663014/…Поскольку вы не указываете
T
,Является общим расширением для того, что вы хотите.
Вы можете использовать расширение, как это возможно,
Более безопасная версия может быть
который будет работать, если
source
не работает с ziporder
.источник
Ответ Джодрелла лучший, но на самом деле он переопределен
System.Linq.Enumerable.Join
. Join также использует Lookup и сохраняет порядок источника.источник
Один простой подход заключается в том, чтобы выполнить последовательность заказа:
источник
Zip
объединяет каждый индекс (в кортеж) с документом в той же позиции в соответствующем списке. Затем OrderBy сортирует кортежи по индексной части, а затем селектор выбирает только наши документы из упорядоченного списка.Item1
не связаныItem2
.