Perl 목록 처리도 해시를 위한 것입니다.
이전에
map
, grep
, 친구 couple times 을 다루었습니다. Most recently , List::Util’s any
function을 사용하여 목록의 항목에 대해 조건이 true인지 확인하는 방법을 설명했습니다. 가장 간단한 경우에 주어진 값이 목록에 전혀 없는지 확인하는 데 사용할 수 있습니다.use feature 'say';
use List::Util 'any';
my @colors =
qw(red orange yellow green blue indigo violet);
say 'matched' if any { /^red$/ } @colors;
그러나 임의의 문자열을 사용하여 이 작업을 많이 수행하려는 경우 배열을 해시의 키로 변환한 다음 거기에서 구성원 자격을 확인합니다. 예를 들어, 다음은 색상 입력(키보드 또는 인수로 전달된 파일)이 무지개에 있는지 확인하는 간단한 스크립트입니다.
#!/usr/bin/env perl
use v5.22; # introduced <<>> for safe opening of arguments
use warnings;
my %in_colors = map {$_ => 1}
qw(red orange yellow green blue indigo violet);
while (<<>>) {
chomp;
say "$_ is in the rainbow" if $in_colors{$_};
}
List::Util에는 Perl FAQ section 4 advises이 있어 해시를 탐색할 때 유용합니다. 예를 들어
pairgrep
은 grep
처럼 작동하지만 전달된 각 키와 값에 $a
및 $b
을 할당하고 일치하는 결과 쌍을 반환합니다. 특정 값 조건과 일치하는 해시 항목을 검색하는 빠른 방법으로 사용했습니다.use List::Util 'pairgrep';
my %numbers = (zero => 0, one => 1, two => 2, three => 3);
my %odds = pairgrep {$b % 2} %numbers;
물론, 일반
grep
, keys
및 a bunch of functions for processing lists of pairs 을 혼합하여 호출하여 이 작업을 수행할 수 있지만 더 시끄럽고 반복적입니다.use v5.20; # for key/value hash slice
my %odds = %numbers{grep {$numbers{$_} % 2} keys %numbers};
pairgrep
의 컴파일된 C 기반 hash slice 코드는 XS(내 컴퓨터의 479,828개 항목)으로 구성된 해시를 통해 작동하는 이 Benchmark 스크립트에서 알 수 있듯이 더 빠를 수 있습니다.#!/usr/bin/env perl
use v5.20;
use warnings;
use List::Util 'pairgrep';
use Benchmark 'cmpthese';
my (%words, $count);
open my $fh, '<', '/usr/share/dict/words'
or die "can't open words: $!";
while (<$fh>) {
chomp;
$words{$_} = $count++;
}
close $fh;
cmpthese(100, {
grep => sub {
my %odds = %words{grep {$words{$_} % 2} keys %words};
},
pairgrep => sub {
my %odds = pairgrep {$b % 2} %words;
},
} );
벤치마크 결과:
Rate grep pairgrep
grep 1.47/s -- -20%
pairgrep 1.84/s 25% --
일반적으로 Unix
words
file 의 자습서 Perl documentation , references , lists of lists , FAQ data structures cookbook 및 array 및 1061506 을 살펴보시기 바랍니다. 그런 다음 일반적인 작업을 위한 기성 기능을 위해 다양한 hash manipulation(특히 포함된 list-processing modules 및 CPAN의 List::Util)을 살펴보십시오. 프로그램에 필요한 데이터 구조를 생성, 관리 및 처리하기 위한 풍부한 기술을 찾을 수 있습니다.
Reference
이 문제에 관하여(Perl 목록 처리도 해시를 위한 것입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mjgardner/perl-list-processing-is-for-hashes-too-2ol8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)