「perlで配列の引き算」をやってみた

perlで配列の引き算、再調査鈍足ランナーのIT日記
っていうのを見つけたので、面白そうだからやってみる。

配列同士の引き算はPDLに任せるとして、
配列の引き算っていうのは、
配列1から配列2に存在する値を取り除くことを意味している。

つまり、こんな感じ???

use v5.14;
use strict;
use warnings;

my @array1 = ( 1, 2, 3, 4, 5 );
my @array2 = ( 3, 4, 5, 6, 7 );

my @diff = ();
foreach my $val (@array1) {
    while ( $array2[0] < $val ) {
        shift @array2;
        last if scalar(@array2) == 0;
    }

    if ( 0 < scalar(@array2) ) {
        if ( $val < $array2[0] ) {
            push @diff, $val;
        }
        else {
            # @array1と@array2に同じ値が存在する
        }
    }
    else {
        push @diff, $val;
    }
}

say join(', ', @diff);

これを実行すると、こんな感じ。
$ perl aaa.pl
1, 2

ところで、これソートされていること前提にしてる訳ですが、
ソートされていない場合は、ソートしてから実行して頂きたく!!!

おしまい。

Leave a Comment