Сравнение списков

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

Cравнить два списка — задача, которую без привлечения модулей (например, List::Compare) в перле решать не очень удобно.

Начинающих может удивить, что выражение @a == @b сравнивает не сами списки, а их размер.

С приходом Perl 5.10 возникает соблазн использовать для сравнения двух списков оператор смарт-матчинга (~~):

say @a ~~ @b;

Это хорошо работает до тех пор, пока в списках содержатся скаляры, например:

my @a = (1, 3, 5);
my @b = (1, 3, 5);
say @a ~~ @b; # 1

Однако следует помнить, что (по крайней мере, начиная с версии 5.10.1), операция сопоставления списков последовательно сопоставляет соответствующие элементы списков, используя тот же оператор ~~.

Поэтому следующий пример тоже напечатает единицу, хотя исходные списки — разные:

my @a = (1, 3, 5);
my @b = (1, qr/\d/, 5);
say @a ~~ @b; # 1

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

Собственно вопрос:
А каким языке удобно сравнивать смешанные списки малым количеством кода? =)

Смешанные списки - списки имеющие данные разных типов, как приведено в последнем примере.

P.S. просто меня первый абзац задел (про то что в Perl это делать не очень удобно) , ибо пока ничего удобнее чем Perl для подобных целей я не видел и не слышал.
P.P.S. хорошо осознаю чей это блог и о чём идёт речь в посте =)

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

Страницы

  • img

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

Сообщение опубликовано 21.01.2010 19:06. Автор — ash.

Предыдущая запись — Go twitter

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

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