Замечательная задача для собеседования.
Дано: хеш вида
my %what_when = (
13 => 'Lunch',
17 => 'Tea',
20 => 'Dinner',
9 => 'Breakfast',
);
Требуется: сформировать список пар, отсортированных по ключу хеша (в примере — по времени):
my @schedule = (
[9, 'Breakfast'],
[13, 'Lunch'],
[17, 'Tea'],
[20, 'Dinner'],
);
my @schedule = map { [ $_, $what_when{ $_ } ] } sort { $a $b } keys %what_when;ну как-то так
my @schedule = map { [ $_, $what_when{ $_ } ] } sort { $a <=> $b } keys %what_when;парсер съел несколько знаков :)
@Anatoloy you should use cmp not and you need to compare the values not the keys:
my @schedule = map { [ $_ => $what_when{$_} ] }
sort { $what_when{$a} cmp $what_when{$b} }
keys %what_when;
Опечатка, наверное, в посте, зачем массиву присваивать скаляр (указатель на массив)?
Если условие правильно, значит решения Анатолия выше - неправильные и наоборот.
Опечатка. Примерно про это я и говорил недавно: http://onperl.ru/onperl/2010/07/pro-cpan-i-testi.html :-)
Хотя, не исправляя, можно проверять кандидатов на внимательность хе-хе.
Requirement is to sort by hash keys, not values, and, as far as I remember, "cmp" is used for string comparing, and we have numbers (hours) here.
map { push @schedule, [$_, $what_when{$_}] } sort keys %what_when;
упс забыл проверить $a cmp $b
А почему cmp используется в последнем примере? Вроде "цмп" - это для сравнения строк, а "старшип", как раз для циферок :)