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
배열에 몇 개의 항목이 있는지 알려 주려고 할 수 있습니다 . 귀찮게하지 마십시오. 이와 같이@array
Perl이 스칼라 값을 찾을 것으로 예상되는 위치 ( "스칼라 컨텍스트에서")를 사용하면 배열의 요소 수를 얻을 수 있습니다.if (@animals < 5) { ... }
perldata 문서는 또한이를 커버 "스칼라 값"섹션 .
스칼라 컨텍스트에서 배열을 평가하면 배열의 길이가 반환됩니다. C 쉼표 연산자와 같이 마지막 값을 반환하는 목록이나 반환하려는 느낌을 반환하는 내장 함수는 목록에 해당되지 않습니다. 다음은 항상 사실입니다.
scalar(@whatever) == $#whatever + 1;
일부 프로그래머는 의심 할 사항이 없도록 명시 적 변환을 사용하기로 선택합니다.
$element_count = scalar(@whatever);
같은 섹션의 앞부분에서 배열의 마지막 요소의 인덱스를 얻는 방법을 설명합니다.
배열의 길이는 스칼라 값입니다. 에서처럼을
@days
평가 하여 배열의 길이를 찾을 수 있습니다 . 그러나 이것은 배열의 길이가 아닙니다. 마지막 요소의 첨자이며 일반적으로 0 번째 요소가 있기 때문에 다른 값입니다.$#days
csh
배열 크기를 인쇄하는 방법에는 여러 가지가 있습니다. 다음은 모두의 의미입니다. 배열이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
'Programing' 카테고리의 다른 글
새로운 언어 기능을 사용하는 프로그램에서 Python 버전을 확인하려면 어떻게해야합니까? (0) | 2020.04.13 |
---|---|
std :: string length () 및 size () 멤버 함수 (0) | 2020.04.13 |
Android 가상 장치를 만들 수 없습니다 (0) | 2020.04.13 |
기본 키는 MySQL에서 자동으로 색인됩니까? (0) | 2020.04.13 |
mv가 존재하지 않을 경우 이동시킬 디렉토리를 작성하는 방법이 있습니까? (0) | 2020.04.13 |