Если вместо чисел в поле sort использовать строки, а вместо '<=>' брать 'cmp', то все очень легко разруливается добавлением символа 'a' в конец строки.<br><br>На бейсике все программировали? Все помним, почему строки через 10 нумеровались? :)<br>
<br><div class="gmail_quote">7 декабря 2009 г. 13:28 пользователь Олег Малёваный <span dir="ltr"><<a href="mailto:deer_oleg@mail.ru">deer_oleg@mail.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Всем добрый день!<br>
<br>
Никак не могу придумать алгоритм<br>
<br>
Суть такая:<br>
есть список объектов. У которых есть поле - порядок сортировки<br>
например, можно изобразить это так<br>
%a = (a=>0,b=>4,c=>10);<br>
то есть объект a имеет индекс 0, объект b имеет индекс 4, с имеет 10<br>
номер сортировки от 0 до 10<br>
<br>
есть ещё один объект.<br>
$s = (d=>1);<br>
Его нужно вставить в список, не нарушив предидущий порядок, и чтобы индексы<br>
не пересекались. Если порядки сортировки совпадают, то надо вставить перед<br>
элементом в списке.<br>
Поясню на примерах:<br>
<br>
# исходный "массив"<br>
%a = (a=>0,b=>4,c=>10);<br>
$s = (d=>1);<br>
# результат<br>
%b = (a=>0,b=>4,c=>10, d=>1); #все просто<br>
<br>
# исходный "массив"<br>
%a = (a=>0,b=>4,c=>10);<br>
$s = (d=>0);<br>
# результат<br>
%b = (d=>0, a=>1,b=>4,c=>10); #"d" встает на место "a", а "a" двигается в<br>
право<br>
# если "a" занимает чьето место, то и она должна тот элемент подвинуть и<br>
т.д.<br>
<br>
<br>
# исходный "массив"<br>
%a = (a=>0,b=>4,c=>10);<br>
$s = (d=>10);<br>
# результат<br>
%b = (a=>0,b=>4,c=>10, d=>9); # у "d" уменьшается индекс<br>
# если "d" занимает чьето место, то должна тот элемент подвинуть и т.д.<br>
<br>
# исходный "массив"<br>
%a = (a=>0,b=>4,c=>10);<br>
$s = (d=>4);<br>
# результат<br>
%b = (a=>0,b=>5,c=>10, d=>4);<br>
# или такой<br>
%b = (a=>0,b=>4,c=>10, d=>3);<br>
# тут нет разницы куда встанет "d" на место "b" или перед ним<br>
<br>
Вот что то даже не приходит в голову с чего начать.<br>
В конечном итоге там список будет, а не хеш (я его для простоты нарисовал)<br>
типа такого<br>
@a = (<br>
{<br>
name => a,<br>
sort => 0,<br>
},<br>
{<br>
name => b,<br>
sort => 4,<br>
},<br>
{<br>
name => c,<br>
sort => 10,<br>
},<br>
);<br>
Может есть что то стандартное для этих целей? Или мысль кто подкинет<br>
полезную :)<br>
<br>
------<br>
С Уважением, Олег Малёваный<br>
<div><div></div><div class="h5"><br>
<br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Andrei Protasovitski<br>< andrei[dot]protasovitski[at]gmail[dot]com ><br>Diemen, Netherlands<br>