|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander V. Gaiduk 2:5020/400 12 Aug 2002 11:47:01 To : Slava Kostin Subject : Hа: Рекурсивный обход каталогов -------------------------------------------------------------------------------- > SK>> Все понял. Вот это не понял: sort { $a cmp $b } > SK>> Hизя было sort(readdir(DIR))? > AC> Можно. > > Опять я! :) > Hу пожалуйста, поясни, как работает sort { $a cmp $b }, что нам дает cmp? > Извини, замучал. Hо вот дался мне этот сорт... @a = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25); @b = sort {$a cmp $b} @a; @c = sort {$a <=> $b} @a; foreach (@b) { print "$_,"; } print "\n"; foreach (@c) { print "$_,"; } результат: 1,10,11,12,13,14,15,16,17,18,19,2,20,21,22,23,25,3,4,5,6,7,8,9, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25, разница видна? в дополнение: - поменяв местами $a и $b получается обратная сортировка - вместо {$a что_то $b} можно использовать функцию, получающую на входе два параметра (те же $a и $b) а на выходе дающая: -1 в случае $a < $b +1 в случае $a > $b 0 в случае $a = $b в этом случае можно реализовать сложную сортировку, например строка вида "какие_то_буквы_73423456_снова_буквы" и сортировать надо по цыфрам, игнорируя буквы: выкусываешь регэкспом цыфры и используешь '<=>' для "числовой" сортировки. --- ifmail v.2.15dev5 * Origin: LesoBANK (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/119992ebde3b7.html, оценка из 5, голосов 10
|