Отсортировать хеш

| Комментариев: 10

Замечательная задача для собеседования.

Дано: хеш вида

my %what_when = (
    13 => 'Lunch',
    17 => 'Tea',
    20 => 'Dinner',
     9 => 'Breakfast',
);

Требуется: сформировать список пар, отсортированных по ключу хеша (в примере — по времени):

my @schedule = (
    [9,  'Breakfast'],
    [13, 'Lunch'],
    [17, 'Tea'],
    [20, 'Dinner'],
);

Комментариев: 10

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;

Опечатка, наверное, в посте, зачем массиву присваивать скаляр (указатель на массив)?

Если условие правильно, значит решения Анатолия выше - неправильные и наоборот.

Хотя, не исправляя, можно проверять кандидатов на внимательность хе-хе.

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 используется в последнем примере? Вроде "цмп" - это для сравнения строк, а "старшип", как раз для циферок :)

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 12.07.2010 23:11. Автор — ash.

Предыдущая запись — Про CPAN и тесты

Следующая запись — Пара ссылок

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.