exists $hash{ $key }
- это хорошее, короткое выражение, понятное и простое в использовании.Очевидно,
!!grep { $_ eq $key } @array
не так коротко, но
$key ~~ @array # smart match
еще короче.Таким образом, начиная с 5.10, просто синтаксически легко проверить умное совпадение как exists
.
Итак, исходя из разницы в производительности между массивами и хэшами, я могу представить, что интеллектуальное сопоставление будет выполняться быстрее для небольшого списка элементов, но хеш будет намного опережать поиск в массиве.с большим списком предметов.
Тем не менее, вы должны Тестировать производительность в любом случае.
И вот почему.На Strawberry Perl, даже с размером списка 1, поиск по хешу превосходит совпадение строк:
array_lookup 577701/s -- -46%
hash_lookup 1068376/s 85% --
С двумя элементами в списке:
array_lookup 464684/s -- -57%
hash_lookup 1068376/s 130% --
И с 20 элементами:
array_lookup 181554/s -- -83%
hash_lookup 1068376/s 488% --
Я бы использовал хеш.