use strict;
use utf8;
open fa, "a.txt" or die "can't open a";
open fb, "b.txt" or die "can't open b";
chomp ( my @A = ) ;
chomp ( my @B = ) ;
close a; close b;
my (@everyone, @AHasBNot, @BHasANot, %count);
$count{A}{$_}=1 foreach @A;
$count{B}{$_}=1 foreach @B;
在這段程式碼中,透過使用循環和雜湊表,我們可以迭代鍵的列表,然後將計數器遞增給定鍵的值。這段程式碼使用了兩個哈希表(A和B),並對它們的鍵進行迭代。然後,透過在循環中使用計數器(C)和foreach語句,我們可以將計數器值增加給定鍵的值。
@大家都有= grep { $count{C}{$_} == 2 } keys %{$count{C}};的意思是根據雜湊表$count{C}中的值等於2的鍵,將其篩選出來保存在@大家都有數組中。這個語句用於對哈希表進行篩選操作,僅保留符合條件的元素。
foreach (@A, @B) { $count{A}{$_} ; $count{B}{$_} ; }
@A有B無這段程式碼使用了Perl語言的grep函數和sort函數,用於從哈希數組%count中選擇A鍵對應的值中只出現一次的元素,並按照字母順序進行排序。
在這段程式碼中,我們使用了Perl語言中的`grep`函數來篩選出陣列B中出現一次而陣列A中沒有的元素。具體實作是透過對B數組中的每個元素進行循環遍歷,並使用哈希表`%count`來記錄每個元素的出現次數。最後,我們將B數組排序,然後使用`grep`函數來篩選出符合條件的元素。最終,我們將篩選結果作為數組傳回。
print("Common: @大家都有$/A-Only: @只有A有$/B-Only: @只有B有");
#$a=[
["sbnumber" => "0001-00001", "name" => "心安苑"],
["sbnumber" => "0001-00002", "name" => "中正苑"],
["sbnumber" => "0001-00003", "name" => "務實苑"]
["sbnumber" => "0001-00004", "name" => "服務苑"],
{ "sbnumber": "0001-00005", "name": "張三" }
];
$b=[
["sbnumber" => "0001-00001", "name" => "心安苑"],
["sbnumber" => "0001-00002", "name" => "中正苑"],
["sbnumber" => "0001-00003", "name" => "務實苑"]
["sbnumber" => "0001-00004", "name" => "服務苑"],
{"sbnumber": "0001-00007", "name": "李四"}
];
$cmp=function($av, $bv){
$r是透過比較$av['sbnumber']和$bv['sbnumber']而得到的結果。
return $r===0 ? strcmp($av['name'],$bv['name']) : $r;
};
你可以使用下面的程式碼來取得陣列$a 中與陣列$b 不同的值並儲存在陣列$c 中:$c = array_values(array_udiff($a, $b, $cmp));
$d=array_udiff($b, $a, $cmp);
foreach($d as &$dv) $c[]=$dv;
unset($d);
var_dump($c);array(2) {
[0]=> array(2) { ["sbnumber"]=> string(15) "0001-00005" ["name"]=> string(6) "張三" }
[1]=> array(2) { ["sbnumber"]=> string(15) "0001-00007" ["name"]=> string(6) "李四" }
為了比較兩次差集並合併結果,需要使用自訂的對內容進行比較的規則。根據不同的內容(例如名字),我們可以確定記錄之間的差異,從而進行比較。
以上是寫一個Perl程式來計算集合的交集和差集的詳細內容。更多資訊請關注PHP中文網其他相關文章!