phpにある
array_diff
と同じ動作をするコードです。
@array_xから@array_yにも含まれている重複した要素を削除するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@array_x = (1,2,4,8,16,32); @array_y = (1,2,4,8,16,64); array_diff(\@array_x,\@array_y); sub array_diff{ ($array_a,$array_b) = @_; @array1 = @$array_a; @array2 = @$array_b; @difference=(); %count = (); foreach $element (@array1) { $count{$element}++ } foreach $element (@array2) { $count{$element}-- } foreach $element (keys %count) { ?if($count{$element} == 1){push(@difference,$element);} } } |
これでOKです。
1つの配列に重複した要素がある場合は、以下のコードをつかいます。
@array3 = (a,d,d,b,c,a,b,b,d);
%tmp= ();
@array4 = grep(? !$tmp{$_}++, @array3);
@array4の配列は、(a,d,b,c)となります。