2013-06-11 127 views
0

如何將一個散列鍵與其他散列值進行比較?這是我的哈希輸出。我只需要返回布爾輸出。將一個散列鍵與其他散列值進行比較

(我的代碼是一種混亂的現在,所以請原諒我不能在這裏發帖。我只需要邏輯,我會嘗試進一步工作納入它。)

$VAR1 = { 
     '5555' => [ 
        '13570' 
        ] 
    }; 
    $VAR1 = { 
     '13570' => [ 
        '[04/Jun/2013:15:06:13' 
       ] 
      }; 

感謝。

+1

[你試過什麼?](http://whathaveyoutried.com) – 2013-06-11 20:56:43

+0

'定義$ VAR1 - > {$ VAR1 - > {'5555'}}''應該告訴你, $ VAR1的鍵'5555'存在於$ VAR1 .... VAR1的不同定義..... 8/ – tjd

+0

我試過,|如果(定義$ hash1 {$ key2})| ,這裏key2是來自第二個散列。 –

回答

-3

我得到這個如何比較一個非加密值與加密值。但我可能是錯的。

如果是這樣的話......

if HASH_VALUE(nonEncrypted) is equal to encryptedValue 
    do something 
else 
    do something else 
+0

請您詳細說明一下嗎? –

+0

這與問題無關 –

+1

這個問題是關於「哈希」Perl數據類型(在其他語言中稱爲「哈希表」,「關聯數組」或「字典」),而不是密碼哈希。 –

1

$VAR1分配兩次。我猜這是一個錯字。你真的想檢查一個散列是否包含一個給定的密鑰,儘管這個密鑰與另一個散列值相同(eq)?您可以使用exists,例如if (exists $hash{$key}) {...}。對於definedexists之間的區別,看What's the difference between exists and defined?

順便說一句,你聲明匿名哈希與{ }和匿名陣列[ ],去參考得到實際的內容之前需要;否則你只需使用引用(就像使用c語言的指針)。

+0

謝謝。我已經發布了單獨的問題以及代碼。 –

+1

不,它不是錯字,它是使用Data :: Dumper顯示哈希的結果。 Data :: Dumper無法訪問變量的實際名稱,因此將它們全部稱爲「$ VAR1」。 –

0

什麼是你扔在這裏下車的是,你的散列值而不是實際值,而是數組引用(如在您的數據[ ... ] ::自卸車輸出)指向包含單元素陣列實際數據。所以,你需要提領他們從所得陣列搶到的第一個元素:

#!/usr/bin/env perl  

use strict; 
use warnings; 
use 5.010; 

my %hash1 = ('5555' => [ '13570' ]); 
my %hash2 = ('13570' => [ '[04/Jun/2013:15:06:13' ]); 

for (keys %hash1) { 
    my $first_key = $_; 
    my $second_key = $hash1{$first_key}[0]; 
    say "$first_key -> $second_key -> $hash2{$second_key}[0]"; 
} 

輸出:

5555 -> 13570 -> [04/Jun/2013:15:06:13 

編輯:備用代碼來檢查每個%hash1條目中的所有數據並顯示所有相應的在%hash2每個值:

#!/usr/bin/env perl  

use strict; 
use warnings; 
use 5.010; 

my %hash1 = ('5555' => [ '13570', '8675309' ]); 
my %hash2 = (
    '13570' => [ '[04/Jun/2013:15:06:13' ], 
    8675309 => [ 'Jenny', 'I got your number' ], 
); 


for (keys %hash1) { 
    my $first_key = $_; 
    for my $second_key (@{$hash1{$first_key}}) { 
    if (exists $hash2{$second_key}) { 
     say "$first_key -> $second_key ->"; 
     say "\t$_" for @{$hash2{$second_key}}; 
    } 
    } 
} 

輸出:

5555 -> 13570 -> 
    [04/Jun/2013:15:06:13 
5555 -> 8675309 -> 
    Jenny 
    I got your number 
+0

感謝戴夫的迴應,這是我正在尋找,但正如你所理解的,第一個哈希可能包含多個值,因此需要grep的存在。 –

+0

@JohnRein請參閱編輯的替代版本以處理數組中的多個值。 –

+0

哇,這太棒了。請忽略散列2中的第二個鍵,因爲它在兩個散列之間並不常見。我們只需要firstkey來比較hash1的值。 –

相關問題