perl에서 길이가 같고 예측 가능한 순서가있는 배열의 각 요소를 비교하려면 each_arrayref
을 유용 서브 루틴에 추가하거나 직접 사용할 수 있습니다.연산자를 사용한 배열의 간단한 요소 별 비교
use List::AllUtils qw/each_arrayref/;
my ($arr1, $arr2) = ([10, 31, 12], [20, 21, 14]);
my $iterate_elems = each_arrayref($arr1, $arr2);
while (my ($x, $y) = $iterate_elems->()) {
say $x lt $y ? "$x is lower " : "$x is higher" ;
}
또는 잘라 내기 및 붙여 넣기 한 lineishly :
perl -MList::AllUtils=each_arrayref -E '
my $iter = each_arrayref([10, 31, 12], [20, 21, 14]);
while (my ($x, $y) = $iter->()){
say $x lt $y ? "$x lower" : "$x higher"}'
을하지만이 어색하고 완전히 고장이 아닌 약간을 보인다. 나는 도움이되는 반복 함수 참조로 $iterate_elems
과 같은 기술적 인 용어를 사용하려고한다. 아마 나는 그것을 명백하게 보이기에 충분하지 않을 수도 있습니다.
perl6에는 metaoperators이 있습니다. 모든 종류의 상당히 간결하고 멋진 목록 비교 및 munging을 허용합니다. 이것은 perl5에서 연산자 오버로딩을 사용하는 방법이 있어야한다고 생각하게한다. 누구든지이 지혜에 대해 논평 할 수 있습니까? 연산자를 적용하기 위해 목록을 반복하는 대신 일련의 목록에 연산자를 적용하는 방식으로 작성된 코드를 이해하는 것이 더 쉬운 것처럼 보입니다. 아마도 map
또는 List::MoreUtils
의 apply
을 독창적으로 사용하면 같은 효과를 얻을 수 있습니다.
놀라운 perl6 코드 샘플을 환영합니다.
어쩌면 나는 당신의 질문의 요점을 놓치고 있지만 ... 만약 길이가 동일하다면'$ i (0 .. $ # array1) {for $ array1 [$ i ], $ array2 [$ i]; }'? – ThisSuitIsBlackNot
일반적으로 배열이나리스트는 훨씬 더 커질 것이고,'each_arrayref'가 가능하다고 생각하는 요소들에 대한 더 많은 비교를 원할지도 모릅니다. 그러나 가능한 한 더 간단합니다. –
나는 아직도 나는 그것을 얻지 않고 있다고 생각한다. 더 많은 요소를 가진 배열이 더 많은 비교를 할 때 루프의 논리를 어떻게 바꿀까요? 아마도 좀 더 구체적인 예가 있습니다 ... – ThisSuitIsBlackNot