|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serge Chervjakov 2:5020/400 03 Nov 2004 01:33:05 To : Alexander Pashchenko Subject : Отсортировать список -------------------------------------------------------------------------------- Tue Nov 02 2004 22:54, Alexander Pashchenko wrote to All: AP> Есть массив @echoes содержащий неупорядоченный список эх. А хотелось бы AP> отсортировать его... проще пояснить на примере: ^n5062.* - V AP> hardw - H AP> linux|unix - L AP> То есть *сгруппировать* :) Чесно говоря, не понял по какому принципу группировка идти должна. По последнему символу в каждой строке (H, L и т.д.)? Если да, то 2 варианта предложу. 1) @list=sort { substr($a,-1,1) cmp substr($b,-1,1) } @list; - думаю что все просто и понятно - банальная сортировка списка по последнему символу в каждом элементе 2) Вероятно более быстрый, но в правильности и низкой памятеемкости сомневаюсь: Заводишь хэш: %list. Ключами будут H,L и т.д. Делаешь перебор @list, у очередного элемента выбираешь последнюю букву и вставляешь всю строку в список лежащий в $list{ОТА_ПОСЛЕДHЯЯ_БУКВА} что-то вроде этого: foreach my $uzel(@list) { push(@{$list{substr($uzel,-1,1)}},$uzel) } потом все это дело объединяешь: @list=map { @{$_} } values(@list); Вот. Ото последнее можно сильно оптимизировать. Для этого например можно использовать не хэши, а завести сколько-то массивов, с именами @H, @L и т.д и уже для каждого узла делать проверку - какая буква в конце и в зависимости от этого, выбирать массив куда добавлять этот узел. Hо в том что это быстрее банальной сортировки я не уверен, проверять - мне лениво. Если тебе надо БЫСТРО, то сам проверишь:). --- ifmail v.2.15dev5.3 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1667909006bbe.html, оценка из 5, голосов 10
|