2つのアレイがあるとしましょう
my @one = ("one","two","three","four","five");
my @two = ("three","five");
2番目の配列のすべての要素が最初の配列にあるかどうかを確認するにはどうすればよいですか?
2つのアレイがあるとしましょう
my @one = ("one","two","three","four","five");
my @two = ("three","five");
2番目の配列のすべての要素が最初の配列にあるかどうかを確認するにはどうすればよいですか?
my %one = map { $_ => 1 } @one;
if (grep($one{$_}, @two) == @two) {
...
}
解決するためのさらに別の方法。
my %hash;
undef @hash{@two}; # add @two to keys %hash
delete @hash{@one}; # remove @one from keys %hash
print !%hash; # is there anything left?
このperlmonksノードからアイデアを盗んだ
use strict;
my @one = ("one","two","three","four","five");
my @two = ("three","five");
my %seen_in_one = map {$_ => 1} @one;
if (my @missing = grep {!$seen_in_one{$_}} @two) {
print "The following elements are missing: @missing";
} else {
print "All were found";
}
別の方法、池上より良いかどうかはわかりません。それでもTIMTOWTDI
#!/usr/bin/env perl
use strict;
use warnings;
use List::Util qw/first/;
use List::MoreUtils qw/all/;
my @one = ("one","two","three","four","five");
my @two = ("three","five");
if ( all { my $find = $_; first { $find eq $_ } @one } @two ) {
print "All \@two found in \@one\n";
}
5.10以降、スマートマッチ演算子がそれを実行します。
my $verdict = !grep { not $_ ~~ @one } @two;
my $verdict = all { $_ ~~ @one } @two;