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」は2つの異なるものと見なされることに注意してください。これは、事前に特定のケースに変換することで解決できます。

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

スマート マッチを使用できます。

#!/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

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 に答える