http://www.perlmonks.org?node_id=1109262


in reply to Difference between two arrays - is there a better way?

This one-liner (versus answers with hashes and inspired by another answer) is working for me but has not been very rigorously tested (as run on AS Perl 5.16.3):

@foo = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); @bar = (0, 1, 2, 5, 7, 9, 11, 12, 13, 14); my @diff = grep {my $baz = $_; ! grep($_ == $baz, @bar)} @foo; print join(",", @diff); Gives: 3,4,6,8,10

Switch the lists around in the nested greps to go from being "in foo but not also bar" to "in bar but not also foo".

-Simon

Replies are listed 'Best First'.
Re^2: Difference between two arrays - is there a better way?
by Anonymous Monk on Jan 05, 2015 at 09:36 UTC
    wow this is mind-bending! can you please go through it in detail?
      @cities = (qw(London Oslo Paris Amsterdam Berlin )); @visited = (qw(Berlin Oslo)); say "Still need to visit:", grep { ! ({ $_, 0 } ~~ @visited) } @cities;
Re^2: Difference between two arrays - is there a better way?
by Anonymous Monk on Nov 24, 2016 at 12:01 UTC
    What if the 2 lists are array of hashes?

      Then I recommend you adapt the concept in perlfaq4 to your situation.