Привет
я бы наверное реализовал это так
для каждого чела завел свойство например sort_order или sort_position, в котором хранил вещественное число, по которому сортировал бы коллекцию
пример массива со списком людей:
people = [
{name: "Андрей", sort_order: 1.0},
{name: "Денис", sort_order: 2.0},
{name: "Мария", sort_order: 3.0},
{name: "Александр", sort_order: 4.0}
]
Допустим хочу переместить Александр между Андреем и Денисом, тогда для Александр нужно в свойство sort_order назначит такое число, которое будет больше чем sort_order Андрея и меньше sort_order Дениса.
Как найти это число?
Ну например можно от sort_order Денис отнять sort_order Андрея, и разделить на 2, затем прибавить это к sort_order Андрея
(2 - 1) / 2 + 1 = 1.5
Получим в результате
[
{name: "Андрей", sort_order: 1.0},
{name: "Денис", sort_order: 2.0},
{name: "Мария", sort_order: 3.0},
{name: "Александр", sort_order: 1.5}
]
А уже при выводе списка людей применяем сортировку
people.sort { |p1,p2| p1[:sort_order] <=> p2[:sort_order] }