我惨遭失败,要求perl“在数组中搜索我感兴趣的元素,写下他们的名字或写一个NA,如果你找不到它们。”
例如,假设我在数组中寻找Orc,Troll和Elf
@creatures = qw/Troll Knight Elf Shrubbery Dragon Ni/;
如果没有找到他们写作和NA,我怎么能检查他们和(我的大问题)。 在这个例子中,我会寻找这样的东西:
NA Troll Elf
由于
答案 0 :(得分: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
修饰符来使匹配大小写不敏感。
答案 1 :(得分:1)
您可以使用智能匹配:
#!/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 ";
}
}
答案 2 :(得分:0)
掌握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 ";
}
}