2016-05-03 92 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