На самом деле вам не нужно сортировать, строить промежуточный индексированный хеш, это O (n):
users_by_id = Hash[@users.map { |u| [u.id, u] }]
users_by_id.values_at(*ids)
Если вы все еще хотите попробовать подход сортировки, преобразование Шварца будет достаточно:
@users.sort_by { |u| ids.index(u.id) }
Однако использование index
в цикле означает красный флаг: O (n ^ 2) время.Мы можем создать промежуточный хеш, чтобы вернуться к O (n * log n):
indexes = Hash[ids.each_with_index.to_a]
@users.sort_by { |u| indexes[u.id] }