Rumah >tutorial komputer >pengetahuan komputer >Tulis program Perl untuk mengira persilangan dan perbezaan set
gunakan ketat;
gunakan utf8;
buka fa, "a.txt" atau mati "tidak boleh buka";
buka fb, "b.txt" atau mati "tak boleh buka b";
chomp ( @A saya = ) ;
chomp ( @B saya = ) ;
tutup a; tutup b;
my (@semua orang, @AHasBNot, @BHasANot, %count);
$count{A}{$_}=1 foreach @A;
$count{B}{$_}=1 foreach @B;
Dalam kod ini, dengan menggunakan gelung dan jadual cincang, kita boleh mengulangi senarai kunci dan kemudian menambah pembilang dengan nilai kunci yang diberikan. Kod ini menggunakan dua jadual cincang (A dan B) dan berulang ke atas kuncinya. Kemudian, dengan menggunakan pembilang (C) dan pernyataan foreach dalam gelung, kita boleh menambah nilai pembilang dengan nilai kunci yang diberikan.
@Semua orang mempunyai = kekunci grep { $count{C}{$_} == 2 } %{$count{C}} bermaksud kunci yang nilainya bersamaan dengan 2 mengikut jadual cincang $count{C} , penapis mereka keluar dan simpannya dalam tatasusunan @everyone. Kenyataan ini digunakan untuk menapis jadual cincang dan hanya mengekalkan elemen yang memenuhi syarat.
foreach (@A, @B) { $count{A}{$_}++; $count{B}{$_}++; }
@A mempunyai B? Kod ini menggunakan fungsi grep dan fungsi isihan bahasa Perl untuk memilih elemen yang muncul sekali sahaja dalam nilai yang sepadan dengan kunci A daripada tatasusunan cincang %count, dan mengisihnya dalam susunan abjad.
Dalam kod ini, kami menggunakan fungsi `grep` dalam bahasa Perl untuk menapis elemen yang muncul sekali dalam tatasusunan B tetapi bukan dalam tatasusunan A. Pelaksanaan khusus adalah untuk menggelungkan setiap elemen dalam tatasusunan B dan menggunakan jadual cincang `%count` untuk merekodkan bilangan kejadian setiap elemen. Akhir sekali, kami mengisih tatasusunan B dan kemudian menggunakan fungsi `grep` untuk menapis unsur-unsur yang memenuhi syarat. Akhir sekali, kami mengembalikan hasil yang ditapis sebagai tatasusunan.
print("Biasa: @Semua orang memilikinya$/A-Sahaja: @Hanya A yang memilikinya$/B-Sahaja: @Hanya B memilikinya");
$a=[
["sbnumber" => "0001-00001", "name" => "心安园"],
["sbnumber" => "0001-00002", "name" => "Zhongzhengyuan"],
["sbnumber" => "0001-00003", "name" => "Taman Pragmatik"]
["sbnumber" => "0001-00004", "name" => "Taman Perkhidmatan"],
{ "sbnumber": "0001-00005", "nama": "Zhang San" }
];
$b=[
["sbnumber" => "0001-00001", "name" => "心安园"],
["sbnumber" => "0001-00002", "name" => "Zhongzhengyuan"],
["sbnumber" => "0001-00003", "name" => "Taman Pragmatik"]
["sbnumber" => "0001-00004", "name" => "Taman Perkhidmatan"],
{"sbnumber": "0001-00007", "name": "李思"}
];
$cmp=fungsi($av, $bv){
$r ialah hasil yang diperoleh dengan membandingkan $av['sbnumber'] dan $bv['sbnumber'].
kembali $r===0 ? strcmp($av['nama'],$bv['nama']) : $r;
};
Anda boleh menggunakan kod berikut untuk mendapatkan nilai dalam tatasusunan $a yang berbeza daripada tatasusunan $b dan menyimpannya dalam tatasusunan $c: $c = array_values(array_udiff($a, $b, $cmp));
$d=array_udiff($b, $a, $cmp);
foreach($d sebagai &$dv) $c[]=$dv;
tidak ditetapkan($d);
var_dump($c);array(2) {
[0]=> tatasusunan(2) { ["sbnumber"]=> rentetan(15) "0001-00005" ["nama"]=> rentetan(6) "Zhang San" }
[1]=> tatasusunan(2) { ["sbnumber"]=> rentetan(15) "0001-00007" ["nama"]=> rentetan(6) "李思" }
Untuk membandingkan dua set perbezaan dan menggabungkan hasil, anda perlu menggunakan peraturan tersuai untuk membandingkan kandungan. Berdasarkan kandungan yang berbeza (seperti nama), kita boleh menentukan perbezaan antara rekod dan dengan itu membandingkannya.
Atas ialah kandungan terperinci Tulis program Perl untuk mengira persilangan dan perbezaan set. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!