|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serge Chervjakov 2:5020/400 11 Sep 2004 19:33:52 To : Edward Yudanov Subject : sort [?] --------------------------------------------------------------------------------
Sat Sep 11 2004 21:47, Edward Yudanov wrote to All:
EY> 02.12 Ivan Ivanov @ 2:5007/99.1
EY> 21.09 Peter Petrov @ 2:5007/99.2
EY> 10.07 Sidor Sidorov @ 2:5007/99.8
EY> 10.07 Vasya Pupkin @ 2:5007/99.4
EY> то есть отсортировать сначала по датам, в случае одинаковых дат -- по
EY> адресам. Подскажите как можно отсортировать файл по такому принципу. У
EY> меня получается сортировать только по первому числу, но тогда спутаны все
EY> месяца и по адресам отсортировать не получается :(
Вариантов есть несколько.. первый вариант (неправильный, но когда-то давно
считал его правильным:) ) - сначала отсортировать по последнему (по адресам),
потом получившееся - по датам. Hекрасиво.
А нормальный вариант - почитать про sort. В блоке втором что указывается?
Фактически - функция сравнения 2 объектов (не важно какой природы - лишь бы
можно было указать, какой объект "больше" какой "меньше"). Вот исходя из этого
и построй соответствующий блок (split тебе в нем поможет). Hу а если серьезно,
то что-нибудь вроде такого:
sub sor
{
my ($adate,$aname,$alname,undef,$aaddr)=split(/ /,$a);
my ($bdate,$bname,$blname,undef,$baddr)=split(/ /,$b);
$adate cmp $bdate || $aaddr cmp $baddr;
}
sort sor @arr;
ну можно еще сделать сортировку адресов правильную - соответственно чуть
придется переписать функцию сравнения...
--- ifmail v.2.15dev5.3
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/16679e9b5a955.html, оценка из 5, голосов 10
|