Perl 使用密钥数组进行哈希查找?

Perl 使用密钥数组进行哈希查找?,perl,Perl,我想看看散列是否包含任何键列表。目前我有: if (grep {$me_hash{$_}} @me_list){ ... 但我认为这是低效的,因为它不会在第一场比赛中退出。有没有更好、更地道的方法 kthxbi您可以使用的任何 use List::MoreUtils qw(any); if (any { $me_hash{$_} } @me_list) { 可能是第一场比赛短路了。此函数相当简单,如下所示: sub any (&@) { my $f = shift;

我想看看散列是否包含任何键列表。目前我有:

if (grep {$me_hash{$_}} @me_list){
    ...
但我认为这是低效的,因为它不会在第一场比赛中退出。有没有更好、更地道的方法

kthxbi

您可以使用的
任何

use List::MoreUtils qw(any);
if (any { $me_hash{$_} } @me_list) {
可能是第一场比赛短路了。此函数相当简单,如下所示:

sub any (&@) {
    my $f = shift;
    foreach ( @_ ) {
        return YES if $f->();
    }
    return NO;
}
其中
YES
NO
定义为

use constant YES => ! 0;
use constant NO  => ! 1;
意思是你可以用类似的东西来改变你自己的版本

sub is_in {
    my ($href, @list) = @_;
    for (@list) {
        return 1 if $href->{$_};
    }
    return 0;
}

注意,您使用的代码<代码> $MEHASHAS{$}} /代码>可以为您可能不认为为假的值返回false,例如空字符串,或者“0 <代码> 0 < /代码>。 您可以使用的

任何

use List::MoreUtils qw(any);
if (any { $me_hash{$_} } @me_list) {
可能是第一场比赛短路了。此函数相当简单,如下所示:

sub any (&@) {
    my $f = shift;
    foreach ( @_ ) {
        return YES if $f->();
    }
    return NO;
}
其中
YES
NO
定义为

use constant YES => ! 0;
use constant NO  => ! 1;
意思是你可以用类似的东西来改变你自己的版本

sub is_in {
    my ($href, @list) = @_;
    for (@list) {
        return 1 if $href->{$_};
    }
    return 0;
}

注意,您使用的代码<代码> $MEHASHAS{$}} /代码>可以为您可能不认为为假的值返回false,例如空字符串,或者“0 <代码> 0 < /代码>。

List::Util
不同于
List::MoreUtils
是核心模块

use List::Util qw(first);
if (defined first {$me_hash{$_}} @me_list) { .. }
如果你不想使用任何外部模块

my $any = sub{ $me_hash{$_} and return 1 for @_; 0 }->(@me_list);
if ($any) { .. }

List::Util
不同于
List::MoreUtils
是核心模块

use List::Util qw(first);
if (defined first {$me_hash{$_}} @me_list) { .. }
如果你不想使用任何外部模块

my $any = sub{ $me_hash{$_} and return 1 for @_; 0 }->(@me_list);
if ($any) { .. }

请注意,所有
@me\u list
都放在堆栈上,但这应该非常快,因为它不涉及复制多个指针。请注意,所有
@me\u list
都放在堆栈上,但这应该非常快,因为它不涉及复制多个指针。