私はちょっとジャムになり、誰かがそれをクリアできるかどうか疑問に思っていました。 [データ@]配列内の配列に重複があるかどうかを調べる(多次元配列)
- @array [@filenames]を保持して多次元配列を作成する.txtファイル
- を含むデータの束を開く
- ファイルが重複している検索:私は何をしたいことはあり お互いのデータ
の観点からここで私は自分のデータを取得し、配列にそれを置くために正規表現を使用して、変数にファイルを読ま:
while (my $row = <$fh>) {
unless ($. == 0) {
{
local $/; # enable slurp
@datalist = <$fh> =~ /\s*\d*\/\s*\d*\|\s*(.*?)\|.*?(?:.*?\|){4}\s*(\S*)\|(\S*).*\|/g; #extract article numbers # $1 = article number, $2 = quantity, $3 = unit
}
push(@arrayofarrays,[@datalist]);
push(@filenames,$file);
last;
}
}
$numr++;
}
open(my $feh,">","test.txt");
print {$feh} Dumper \@arrayofarrays;
Aダンパ(pseudoresultsはそれが読みやすいと短くする)私のデータが正常に見えることを示しています
$VAR1 = [
[
'data type1',
'data type2',
'data type3',
'data type1',
'data type2',
'data type3',
...
],
[
'data type1',
'data type2',
'data type3',
...
],
...
];
誰でもデータのセット間の重複をチェックする簡単な方法を知っているのであれば、私は思ったんだけど?あなたが@dataListを作成すると、そのチェックのためのキーを作成
my $i = 0;
my $j = 0;
while ($i <= scalar @arrayofarrays) {
$j = 0;
while ($j <= scalar @arrayofarrays) {
if (@{$arrayofarrays[$i]} eq @{$arrayofarrays[$j]}) {
print "\n'$filenames[$i]' is duplicate to '$filenames[$j]'.";
} $j++;
} $i++;
}
おそらくあなたはあなたの質問を編集することができます(http://stackoverflow.com/posts/43140260/edit)私たちを表示するあなたが期待している出力。あなたのサンプルコードはむしろ混乱しています。 2番目のレベル配列の各要素の数を比較しています。要素の数ではありません。そして、数値比較( '==')ではなく文字列比較( 'eq')を使ってそれらの数値を比較しています。 –
どのファイルが同一であるかを確認したい場合は、すべてをメモリに読み込まないようにしてください。 ['Digest :: MD5'](https://metacpan.org/pod/Digest::MD5)を使ってそれぞれのチェックサムを作成し、結果を比較するだけです。 – Borodin