2012-04-17 9 views
2

私はperlを使ってハッシュで検索を実装したいと考えています。私はハッシュの次のデータを持っています値を使ってハッシュを検索し、perlで成功すると対応するキーを返す方法

%hash = {0 => "Hello", 1=> "world"}. 

私は値(worldとhelloを意味します)を使ってハッシュを検索し、対応するキーを返したいと思います。

例:私は世界のために検索すると、結果はfor (keys %hash) ...文でハッシュのキーの1

+1

まず、 '{' ''} 'を' '(' ')' 'に変更します。' '' '' 'は匿名ハッシュを返します。 –

答えて

3

反復することと、あなたが行くように値をチェックする必要があります。あなたが探しているものを見つける場合は、

my $hash = { 0 => "World", 1 => "Hello" }; 

for (keys %$hash) { 
    my $val = $hash->{$_}; 
    return $_ if $val eq 'World'; # or whatever you are looking for 
} 

を返す別のオプションは、リテラル{ }の使用はハッシュリファレンスではなくハッシュを作成while (... each ...)

my $hash = { 0 => "World", 1 => "Hello" }; 

while (($key, $val) = each %$hash) { 
    return $key if $val eq 'World'; # or whatever you are looking for 
} 

を使用することです

$h = { a => 'b', c => 'd' }; 

を使用して使用するリテラルハッシュを作成する()

%h = (a => 'b', c => 'd'); 

ハッシュリファレンス

$h = { a => 'b', c => 'd' }; 
print "$k :: $v\n" while (($k, $v) = each %$h); 

c :: d 
a :: b 
+0

それぞれのキーワードを使ってみましたが、値は返されず/印刷されません。 – chaitu

+0

私は%ハッシュとしてハッシュを初期化しました。これは犯人かもしれません – chaitu

+0

編集された回答を参照 – zellio

2

while ... eachの実行した場合:ハッシュが非常に大きくなく、

  • 値は、あなたが簡単に作成できるユニークな
  • ある

    1. reverseの検索ハッシュ:

      my %lookup = reverse %hash; 
      my $key = $lookup{'world'}; # key from %hash or undef 
      
    +1

    2. **値**はユニークです – Toto

    +0

    ハーブ、私は*後*を考えていた;一定 –

    0
    use strict; 
    use warnings; 
    
    my %hash = (0 => "Hello", 1=> "world"); 
    my $val = 'world'; 
    
    my @keys = grep { $hash{$_} eq $val } keys %hash; 
    
    print "Keys: ", join(", ", @keys), "\n"; 
    

    値は、複数のキーについて同一である場合、これはすなわち、すべてのキーを返します。

    関連する問題