5 つのテキスト ファイルに値を保存しました。各テキスト ファイルの値は、配列と見なす必要があります。これらの5つの配列の共通要素を読み取って出力するために、perlプログラムを作成しようとしています。
例えば
@a1=(1,7,4,5);
@a2=(1,9,4,5);
@a3=qw(1,6,4,5 );
@a4=qw(1 2 4 5 );
@a5=qw(1 2 4 5 );
印刷を期待しています
1 4 5
5 つのテキスト ファイルに値を保存しました。各テキスト ファイルの値は、配列と見なす必要があります。これらの5つの配列の共通要素を読み取って出力するために、perlプログラムを作成しようとしています。
例えば
@a1=(1,7,4,5);
@a2=(1,9,4,5);
@a3=qw(1,6,4,5 );
@a4=qw(1 2 4 5 );
@a5=qw(1 2 4 5 );
印刷を期待しています
1 4 5
perlfaqには、よくある質問に対する多くの回答があります。もちろん、もう一度質問する前に誰もわざわざチェックする必要がない場合は、時間と労力の無駄です:-)
2つの配列の差を計算するにはどうすればよいですか?2つの配列の共通部分を計算するにはどうすればよいですか?
ハッシュを使用します。これが両方とそれ以上を行うためのコードです。これは、各要素が特定の配列内で一意であることを前提としています。
my (@union, @intersection, @difference); my %count = (); foreach my $element (@array1, @array2) { $count{$element}++ } foreach my $element (keys %count) { push @union, $element; push @{ $count{$element} > 1 ? \@intersection : \@difference }, $element; }
2つの配列の共通部分が必要です。そして、それをさらに3回行います。
入力ファイルの形式はわかりませんが、このプログラムは各ファイル内のすべての数字文字列を検索し、それらすべてに共通する値をリストします。
コマンドライン引数として、入力ファイルのリストが必要です。
use strict;
use warnings;
use File::Slurp 'read_file';
my %counts;
for (@ARGV) {
$counts{$_}++ for map /\d+/g, read_file $_;
}
my @common = grep $counts{$_} == @ARGV, keys %counts;
printf "(%s)\n", join ', ', @common;
出力
(4, 1, 5)