2011-10-19 18 views
4

は人口のハッシュを考えてみましょう:Perlでは、どのようにしてハッシュから任意の値を取得できますか?

%hash = (...); 

私はハッシュから値を取得します。どのような価値もあります。

私は実際には最初の1を取得するには、キーの配列を作成したくないので、

$arbitrary_value = (values %hash)[0]; 

を避けるためにしたいと思います。

値のリストを生成せずにこれを行う方法はありますか?

注意:ランダムである必要はありません。どんな価値もあります。

提案がありますか?

EDIT: 私はどのキーも知らないと仮定します。

+0

鍵はありますか? –

+0

キーがわからないことを確認するために更新されました – Dancrumb

答えて

16

使用each

#!/usr/bin/env perl 

use strict; use warnings; 

my %h = qw(a b c d e f); 

my (undef, $value) = each %h; 
keys %h; # reset iterator; 

print "$value\n"; 

としては、コメントでIn particular, calling keys() in void context resets the iterator with no other overheadを指摘しました。 This behavior has been there at least since 2003の情報がkeysvaluesのドキュメントに追加されたときに表示されます。

+1

'スカラー 'が過剰です。あなたが明示的にvoid文脈の代わりにスカラー文脈でそれを評価することによって、より多くの仕事をするようにします。ちょっとだけ(キーの数を持つスカラーを作成し、それを返してからそれを解放する) – ikegami

3

ただ、シナンが提供する運動、および%h変数を使用したとして、次のような作品私のために:

my (undef, $val) = %h; 
print $val, "\n"; 

そしてもちろん、次のようにも動作します:

print((%h)[1], "\n"); 

楽しい事実: Perlは、eachに使用されているのと同じ手法を使用していますが、反復子のリセットキャッチはありません。

関連する問題