我很遗憾地没有要求 perl“在数组中搜索我感兴趣的元素,写下他们的名字,或者如果你没有找到他们就写一个 NA”。
例如,假设我在一个数组中寻找 Orc、Troll 和 Elf
@creatures = qw/Troll Knight Elf Shrubbery Dragon Ni/;
当没有找到他们写作和 NA 时,我如何检查他们和(我的大问题)。在这个例子中,我会寻找这样的东西:
NA Troll Elf
谢谢
您可以使用哈希进行快速查找:
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
修饰符使匹配不区分大小写。
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 ";
}
}
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 ";
}
}