2016-05-03 51 views
0

我寫了這個簡單子的第一哈希鍵,它可以作爲銷售:的Perl:找到一個哈希這也是另一種散列

sub search_dispatch_table 
{ 
    my ($href1, $href2) = @_; 

    foreach my $key (keys %$href1) 
    { 
     return $key if exists $href2->{$key}; 
    } 
    return undef; 
} 

我只是想返回href1第一個關鍵,其也存在於href2

有沒有更好的方法來做到這一點?

+2

您的意思是「第一」,如「任何鍵會做,只是停止當您找到一個」或在「第一個鍵時按順序排序」? (你的代碼確實是前者,但只是想確認。) – ThisSuitIsBlackNot

+2

看來你的代碼目前正常工作,而你正在尋求改進它。一般來說,這些問題對於這個網站太過分了,但是你可能會在[CodeReview.SE](http://codereview.stackexchange.com/tour)找到更好的運氣。請記住閱讀[他們的要求](http://codereview.stackexchange.com/help/on-topic),因爲它們比這個網站更嚴格。 –

+3

您沒有指定您希望用來評估哪種解決方案更好的標準。 – ikegami

回答

2

您沒有指定您希望用來評估哪種解決方案更好的標準。

假設你的意思是「更快」,你可以使用each而不是keys加速最好的情況,但就是這樣。

sub search_dispatch_table { 
    my ($href1, $href2) = @_; 

    while (my ($key) = each(%$href1)) { 
     if (exists($href2->{$key})) { 
      keys(%$href1); # Reset iterator. 
      return $key; 
     } 
    } 

    return undef; 
} 
+0

'#重置iterator'很好!我從來沒有用鑰匙這種方式,你暗示某種程度上這些鑰匙對'%$ href1'做了些什麼,是嗎? – lzc

+1

試試'perl -E'my%h = map {$ _ => 1} qw(a b c d);每個(%h)爲1..2;說鍵(%h);''看到問題? – ikegami