Programing

Perl에서 배열의 크기를 구합니다

lottogame 2020. 4. 13. 08:07
반응형

Perl에서 배열의 크기를 구합니다


배열의 크기를 찾는 여러 가지 방법을 찾은 것 같습니다. 이 세 가지 방법의 차이점은 무엇입니까?

my @arr = (2);
print scalar @arr; # First way to print array size

print $#arr; # Second way to print array size

my $arrSize = @arr;
print $arrSize; # Third way to print array size

첫 번째와 세 번째 방법은 동일합니다. 스칼라 컨텍스트에서 배열을 평가합니다. 이것을 배열의 크기를 얻는 표준 방법이라고 생각합니다.

두 번째 방법은 실제로 배열의 마지막 인덱스를 반환하는데, 이는 일반적으로 배열 크기와 동일하지 않습니다.


첫째, 두 번째는 다른 두 가지와 동일하지 않습니다. $#array배열의 마지막 인덱스를 반환합니다. 배열의 크기보다 1이 작습니다.

다른 두 개는 사실상 동일합니다. 스칼라 컨텍스트를 만들기 위해 단순히 두 가지 방법을 사용하고 있습니다. 가독성 문제로 귀결됩니다.

개인적으로 다음을 선호합니다.

say 0+@array;          # Represent @array as a number

나는 그것을보다 명확하게 발견

say scalar(@array);    # Represent @array as a scalar

my $size = @array;
say $size;

후자는 이것처럼 아주 분명해 보이지만 다른 코드의 일부 인 경우 여분의 줄이 선명도에서 벗어납니다. @array스칼라 컨텍스트에서 수행 하는 작업을 가르치 $size거나 두 번 이상 사용하려는 경우 유용합니다 .


이것은 배열을 스칼라 컨텍스트로 만들어서 크기를 계산하여 크기를 얻습니다.

print scalar @arr;

이것은 스칼라 변수에 할당되기 때문에 배열을 스칼라 컨텍스트로 만드는 또 다른 방법입니다.

my $arrSize = @arr;

이것은 배열에서 마지막 요소의 인덱스를 얻습니다. 실제로는 크기에서 1을 뺀 것입니다 (인덱스가 0에서 시작한다고 가정하면 펄에서 조정할 수 있지만 일반적으로 나쁜 생각입니다).

print $#arr;

이 마지막 것은 배열 크기를 얻는 데 사용하기에 좋지 않습니다. 배열의 마지막 요소를 얻으려는 경우 유용합니다.

my $lastElement = $arr[$#arr];

또한 스택 오버플로에서 볼 수 있듯이이 구문은 대부분의 구문 강조 표시기에서 올바르게 처리되지 않습니다 ...


두 번째 방법을 사용하려면 1을 추가하십시오.

print $#arr + 1; # Second way to print array size

두 번째를 약간 수정하면 세 가지 모두 동일한 결과를 제공합니다.

my @arr = (2, 4, 8, 10);

print "First result:\n";
print scalar @arr; 

print "\n\nSecond result:\n";
print $#arr + 1; # Shift numeration with +1 as it shows last index that starts with 0.

print "\n\nThird result:\n";
my $arrSize = @arr;
print $arrSize;

예:

my @a = (undef, undef);
my $size = @a;

warn "Size: " . $#a;   # Size: 1. It's not the size
warn "Size: " . $size; # Size: 2

"펄 변수 유형"섹션perlintro 설명서 포함

특수 변수 $#array는 배열의 마지막 요소의 인덱스를 알려줍니다.

print $mixed[$#mixed];       # last element, prints 1.23

$#array + 1배열에 몇 개의 항목이 있는지 알려 주려고 할 수 있습니다 . 귀찮게하지 마십시오. 이와 같이 @arrayPerl이 스칼라 값을 찾을 것으로 예상되는 위치 ( "스칼라 컨텍스트에서")를 사용하면 배열의 요소 수를 얻을 수 있습니다.

if (@animals < 5) { ... }

perldata 문서는 또한이를 커버 "스칼라 값"섹션 .

스칼라 컨텍스트에서 배열을 평가하면 배열의 길이가 반환됩니다. C 쉼표 연산자와 같이 마지막 값을 반환하는 목록이나 반환하려는 느낌을 반환하는 내장 함수는 목록에 해당되지 않습니다. 다음은 항상 사실입니다.

scalar(@whatever) == $#whatever + 1;

일부 프로그래머는 의심 할 사항이 없도록 명시 적 변환을 사용하기로 선택합니다.

$element_count = scalar(@whatever);

같은 섹션의 앞부분에서 배열의 마지막 요소의 인덱스를 얻는 방법을 설명합니다.

배열의 길이는 스칼라 값입니다. 에서처럼을 @days평가 하여 배열의 길이를 찾을 수 있습니다 . 그러나 이것은 배열의 길이가 아닙니다. 마지막 요소의 첨자이며 일반적으로 0 번째 요소가 있기 때문에 다른 값입니다.$#dayscsh


배열 크기를 인쇄하는 방법에는 여러 가지가 있습니다. 다음은 모두의 의미입니다. 배열이my @arr = (3,4);

방법 1 : 스칼라

이것은 배열의 크기를 얻는 올바른 방법입니다.

print scalar @arr;  # prints size, here 2

방법 2 : 색인 번호

$#arr배열의 마지막 인덱스를 제공합니다. 따라서 배열의 크기가 10이면 마지막 인덱스는 9입니다.

print $#arr;     # prints 1, as last index is 1
print $#arr + 1; # Add 1 to last index to get array size

여기서는 배열을 0-indexed 로 간주하여 1을 추가 합니다. 그러나 0이 아닌 경우이 논리는 실패 합니다.

perl -le 'local $[ = 4; my @arr=(3,4); print $#arr + 1;'   # prints 6

위의 예는 초기 인덱스를 4로 설정했기 때문에 6을 인쇄합니다. 이제 인덱스는 요소 3과 4를 가진 5와 6입니다.

방법 3 :

스칼라 컨텍스트에서 배열을 사용하면 배열의 크기를 반환합니다.

my $size = @arr;
print $size;   # prints size, here 2

실제로 방법 3과 방법 1은 동일합니다.


perldoc perldata 에서 인용하는 것이 안전해야합니다.

다음은 항상 사실입니다.

scalar(@whatever) == $#whatever + 1;

당신이 $ # whatever ++를하지 않고 크기 나 배열을 신비롭게 늘리는 한.

배열 인덱스는 0으로 시작합니다.

null 목록 ()을 할당하여 배열을 무단으로자를 수 있습니다. 다음은 동일합니다.

    @whatever = ();
    $#whatever = -1;

배열을 비우는 방법을 찾아야합니다. $ # empty == -1이면 찾았습니다.


int(@array)스칼라라는 주장을 위협하기 때문에 어떨까요?


배열의 크기를 찾으려면 scalar키워드를 사용하십시오 .

print scalar @array;

배열의 마지막 색인을 찾으려면 $#(Perl 기본 변수)가 있습니다. 배열의 마지막 인덱스를 제공합니다. 배열이 0에서 시작하면 다음에 하나를 추가하여 배열의 크기를 얻습니다 $#.

print "$#array+1";

예:

my @a = qw(1 3 5);
print scalar @a, "\n";
print $#a+1, "\n";

산출:

3

3

참고 URL : https://stackoverflow.com/questions/7406807/find-size-of-an-array-in-perl

반응형