Если вместо чисел в поле sort использовать строки, а вместо '<=>' брать 'cmp', то все очень легко разруливается добавлением символа 'a' в конец строки.
На бейсике все программировали? Все помним, почему строки через 10 нумеровались? :) 7 декабря 2009 г. 13:28 пользователь Олег Малёваный <[email protected]>написал: > Всем добрый день! > > Никак не могу придумать алгоритм > > Суть такая: > есть список объектов. У которых есть поле - порядок сортировки > например, можно изобразить это так > %a = (a=>0,b=>4,c=>10); > то есть объект a имеет индекс 0, объект b имеет индекс 4, с имеет 10 > номер сортировки от 0 до 10 > > есть ещё один объект. > $s = (d=>1); > Его нужно вставить в список, не нарушив предидущий порядок, и чтобы индексы > не пересекались. Если порядки сортировки совпадают, то надо вставить перед > элементом в списке. > Поясню на примерах: > > # исходный "массив" > %a = (a=>0,b=>4,c=>10); > $s = (d=>1); > # результат > %b = (a=>0,b=>4,c=>10, d=>1); #все просто > > # исходный "массив" > %a = (a=>0,b=>4,c=>10); > $s = (d=>0); > # результат > %b = (d=>0, a=>1,b=>4,c=>10); #"d" встает на место "a", а "a" двигается в > право > # если "a" занимает чьето место, то и она должна тот элемент подвинуть и > т.д. > > > # исходный "массив" > %a = (a=>0,b=>4,c=>10); > $s = (d=>10); > # результат > %b = (a=>0,b=>4,c=>10, d=>9); # у "d" уменьшается индекс > # если "d" занимает чьето место, то должна тот элемент подвинуть и т.д. > > # исходный "массив" > %a = (a=>0,b=>4,c=>10); > $s = (d=>4); > # результат > %b = (a=>0,b=>5,c=>10, d=>4); > # или такой > %b = (a=>0,b=>4,c=>10, d=>3); > # тут нет разницы куда встанет "d" на место "b" или перед ним > > Вот что то даже не приходит в голову с чего начать. > В конечном итоге там список будет, а не хеш (я его для простоты нарисовал) > типа такого > @a = ( > { > name => a, > sort => 0, > }, > { > name => b, > sort => 4, > }, > { > name => c, > sort => 10, > }, > ); > Может есть что то стандартное для этих целей? Или мысль кто подкинет > полезную :) > > ------ > С Уважением, Олег Малёваный > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Andrei Protasovitski < andrei[dot]protasovitski[at]gmail[dot]com > Diemen, Netherlands
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
