-3

2つのアレイがあるとしましょう

my @one = ("one","two","three","four","five");
my @two = ("three","five");

2番目の配列のすべての要素が最初の配列にあるかどうかを確認するにはどうすればよいですか?

4

5 に答える 5

4
my %one = map { $_ => 1 } @one;
if (grep($one{$_}, @two) == @two) {
   ...
}
于 2012-10-09T18:49:45.737 に答える
3

解決するためのさらに別の方法。

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ノードからアイデアを盗んだ

于 2012-10-09T21:18:03.230 に答える
1
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";
}
于 2012-10-09T22:22:45.093 に答える
0

別の方法、池上より良いかどうかはわかりません。それでも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";
}
于 2012-10-09T19:12:10.157 に答える
0

5.10以降、スマートマッチ演算子がそれを実行します。

my $verdict = !grep { not $_ ~~ @one } @two;

またはList::MoreUtils::all

my $verdict = all { $_ ~~ @one } @two;
于 2012-10-09T19:30:52.520 に答える