2009-07-10 4 views

답변

61
scalar keys %hash 

하거나

keys %hash 

당신은 스칼라 문맥에서 이미 있다면, 예를 들어, my $hash_count = keys %hash   또는   print 'bighash' if keys %hash > 1000.

덧붙여 말하면 $#array은 요소 수를 찾지 못하고 마지막 인덱스를 찾습니다. scalar @array은 요소 수를 찾습니다.

+0

$ # + 1 - 우리는 요소의 어떤을 얻을 것이다. 나는 $ #을 의미하고있다. # – joe

+1

아하이오. 글쎄, 나는'$ array + 1 '에 여전히'scalar @ array'를 추천 할 것이다. :) – chaos

+0

거기에 어떤 특별한 이유가있다. – joe

2

우리가 하나 적은을 반환이 너무

my $keys = keys(%r) ; 
print "keys = $keys" ; 

0+(keys %r) 
+0

배열에있는 원소의 수를 알려줍니다. – joe

1

다음과 같이 사용할 수 있습니다 귀하의 해시 키의 수. 당신이 일 (또는 간결을) 수행의 $#array 스타일을 좋아하면 당신은 그것을 좋아하는 수

$#{$hash}; 

CRITICAL 편집 :이 재미있다 ...에

보류. 배열 참조로 사용하려면 작동하지만 외부에서는 사용하지 않는 경우 작동합니다. 당신이 임시로 배열로 키를 할당 한 것을 제공, 당신의 해시의 마지막 키에 액세스 할 경우에 따라서는 유용 :

%hash = ("barney" => "dinosaur", "elmo" => "monster"); 
@array = sort {$a cmp $b} keys %hash; 
print $array[$#{$hash}]; 
# prints "elmo" 
+1

이 대답은 저를 놀라게 했으므로 그것을 시도하고 ...작동하지 않습니다. – dave4420

+0

@Dave : 위의 중요한 편집을 확인하십시오. 머리를 가져 주셔서 감사합니다. – Zaid

+5

@ Zaid :'$ # {$ hash} '를'-1'로 대체하십시오. '$ array [-1]'은 항상'@ array'의 마지막 요소를 의미합니다 (그리고'$ array [-2]'는 항상 두번째부터 마지막까지를 의미합니다). '$ hash '는'% hash'와 관련이 없습니다. 귀하의 코드에서 Perl은 정의되지 않은 변수를 배열 참조로 사용하므로 배열 참조라고 가정합니다. '경고를 사용하십시오; 엄격한;을 사용하고 처음에는 perl이 말한 것을보십시오. – dave4420

0

을하지만 펄 5.10 이후 :이 체크 아웃

use feature ":5.10"; 
my %p =(); 
say $#%p; 

# $# is no longer supported 

악화 :

use feature ":5.10"; 
my %p = (a=>1, b=>2, c=>3); 
say $#{%p}; 

# -1 
-4

이 쉬운 방법과 해시의 크기에 작동합니다.

인쇄 스칼라 키 % hash;

+2

죄송하지만 ... 'print'를 사용하는 것 외에 7 년 전 게시 된 무겁게 upvoted, accepted 대답과 어떻게 다른가요? –

0

인쇄 스칼라 키 % hash;

OR 

$ X = keys % hash; 인쇄 $ X;

(키 % 해시 스칼라 문맥에 추가 변경은 (스칼라 변수에 할당 목록 맥락에서 키의 값을 반환) .)

관련 문제