2009-07-10 19 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

我々は1以下を返します。これも

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

0+(keys %r) 
+0

投稿した後にこれが見つかりました – joe

1

次のように使用できるよう、あなたのハッシュのキーの数。あなたは、物事(または簡潔)を行うための$#arrayスタイルが好きであれば、あなたはそれを好むことがあります。

$#{$hash}; 

CRITICAL EDIT:

ホールドを上...これは興味深いです。配列参照として使用する場合には機能しますが、外部で使用する場合は使用できません。これをチェックアウト:だから、それはあなたがあなたのハッシュの最後のキーにアクセスする場合は、一時に配列としてあなたの鍵を割り当てたことを提供する便利です

%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] 'は常に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年前に投稿された、重大にアップした、受け入れられた答えとどのように違いますか? –

0

スカラーキーを出力する%hash;

OR 

$ X = keys%hash; print $ X;

(キー%ハッシュスカラーコンテキストへのさらなる変更が(スカラー変数に代入リストコンテキスト内のキーの値を返す) 。)

関連する問題