을 얻는 방법의 고유 한 요소 펄 목록

작업입니다. 프로그램에서 프로그래밍 언어 Perl 목록이 있다. 목록 문자열 숫자입니다. 당신이 얻을 필요가 고유한 값이다.

솔루션 기능을 사용하여 uniq 에서 라이브러리 List::Util

가장 쉽고 가장 편리한 방법으로 이 문제를 해결하기 위해 사용하는 것입 기능 uniq 라이브러리에서 List::Util. 여기에는 예제 코드:

▶ Run
#!/usr/bin/perl

use List::Util qw(uniq);
use Data::Dumper;

my @arr = uniq('one', 'one', 'b', 'one', 'b', 4);

print Dumper \@arr;

저장할 경우 이 텍스트 파일로 script.pl,다음을 실행하는 콘솔에서 perl script.pl, 그것이 화면에 나타납니다:

$VAR1 = [
          'one',
          'b',
          4
        ];

기능 uniq 을 보존하기 위해 요소,그리고 제대로 작동하면 목록은 undef.

이 코드는 것이 작품에서는 Perl5.26. 이전 버전의 펄 포함 버전은 라이브러리의 List::Util 있는 없는 기능 uniq. 그래서 순서 이 솔루션을 사용하면 당신이 필요하거나 업데이트 펄이나 최신 버전 라이브러리 List::Util.

공식적인 문서

여기에 조각의 출력 perldoc List::Util 일 에 대한 기능 uniq:

  uniq
        my @subset = uniq @values

    *Since version 1.45.*

    Filters a list of values to remove subsequent duplicates, as judged by a
    DWIM-ish string equality or "undef" test. Preserves the order of unique
    elements, and retains the first value of any duplicate set.

        my $count = uniq @values

    In scalar context, returns the number of elements that would have been
    returned as a list.

    The "undef" value is treated by this function as distinct from the empty
    string, and no warning will be produced. It is left as-is in the
    returned list. Subsequent "undef" values are still considered identical
    to the first, and will be removed.

자신의 의사 결정

충분히 쓰는 간소화된 버전의 기능 uniq 에서 라이브러리 List::Util:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

sub uniq {
     my (@values) = @_;

     my %h = map {$_ => 1} @values;

     return keys %h;
}

my @arr = uniq('one', 'one', 'b', 'one', 'b', 4);

print Dumper \@arr;

이 코드는 바로 버전에서 작동합 Perl. 여기에 세 가지선 잠수함에서 uniq:

  • my (@values) = @_; —넣어 인수로 전달되는 서브우퍼에서 변 @values
  • my %h = map {$_ => 1} @values; —의 각 요소에 대한 @values 가 만든 목록의 두 가지 요소,원래 요소 및 장치,및 모든 결과 목록 함께 하나의 목록으로 할당하는 목록이다. Hash 은 순서로 설정의 키-값입니다. 하나는 열쇠가 될 수 있습니다. 으로 인해 이 숙박 시설의 해쉬 제거하는 모든 중복.
  • return keys %h; —반 목록으로만 구성되어 있 열쇠

하지만 비교하는 기능 uniq 에서 라이브러리 List::Util 이 코드는 단점이 있습니다:

  • 우리의 기능 uniq 반환 요소를 임의 순서입니다. 다른 실행의 동일한 코드를 리드하는 다른 결과(반환되는 값에 의해 기능 uniq 같은 것,그러나 주문하는 그들은 다른 것입니다)
  • 우리의 기능이 제대로 작동하지 않는다면 목록은 undef. 우리가 사용하는 모든 값을 목록으로 해시 키를 사용합니다. 고 undef 할 수 없는 키에 해시. 을 사용하려고 할 때 undef 키로 사용될 것이다 빈 문자열을 대신 undef.

다른 기사