0

我很遗憾地没有要求 perl“在数组中搜索我感兴趣的元素,写下他们的名字,或者如果你没有找到他们就写一个 NA”。

例如,假设我在一个数组中寻找 Orc、Troll 和 Elf

    @creatures = qw/Troll Knight Elf Shrubbery Dragon Ni/;

当没有找到他们写作和 NA 时,我如何检查他们和(我的大问题)。在这个例子中,我会寻找这样的东西:

    NA  Troll   Elf

谢谢

4

3 回答 3

3

您可以使用哈希进行快速查找:

my %creatures = map { $_ => 1 } @creatures;

print $creatures{$_} ? $_ : "NA" for qw(Orc Troll Elf);

请注意,这会区分大小写,因此它将考虑“orc”和“Orc”两个不同的东西。您可以通过预先转换为特定情况来解决此问题:

my %creatures = map { lc($_) => 1 } @creatures;

print $creatures{lc($_)} ? $_ : "NA" for qw(Orc Troll Elf);

您还可以使用grep

for my $race (qw(Orc Troll Elf)) {
    if (grep /^$race$/i, @creatures) {
        print $race;
    } else {
        print "NA";
    }
}

请注意使用/i修饰符使匹配不区分大小写。

于 2013-01-18T14:17:21.743 回答
1

You can use the Smart Match:

#!/usr/bin/perl
use warnings;
use strict;

my @creatures = qw/Troll Knight Elf Shrubbery Dragon Ni/;
my @searches  = qw/Orc Troll Elf/;

for my $search (@searches) {
    if ($search ~~ @creatures) {
        print $search, ' ';
    } else {
        print "NA ";
    }
}
于 2013-01-18T14:02:29.033 回答
0

With the basic knowledge of perl:

use warnings;
use strict;

my @str = qw(Troll Knight Elf Shrubbery Dragon Ni);
my %hash;
my @to_match = qw(Orc Troll Elf);
foreach my $s (@str) {
    $hash{$s} = $s;
}

foreach (@to_match) {
    if (defined $hash{$_}) {
        print "$_ ";
    } else {
        print "NA ";
    }
}
于 2013-01-18T14:24:40.403 回答