Frank Schönmann: Intersection of "viel" arrays :-)

Beitrag lesen

hi!

Ziel: In mehreren Arrays nach gemeinsamen Elementen suchen (Intersection).

Ok, es war nicht ganz einfach, aber ich habe eine Lösung gefunden :)

=== cut ===
#!/usr/bin/perl

@a = ("eins", "zwei", "drei", "vier", "fuenf");
@b = ("zwei", "drei", "fuenf");
@c = ("eins", "drei", "fuenf");
@d = ("drei");

print &intersect(@a, @b, @c, @d);

sub intersect
{
  for (@{scalar shift})
  {
    $union[0]{$_} = 1;
  }

while (@_)
  {
    $i++;
    for (@{scalar shift})
    {
      if ($union[$i-1]{$_}) { $union[$i]{$_} = 1; }
    }
  }

return keys %{$union[$i]};
}
=== cut ===

Die Funktion &intersect erwartet mindestens zwei Arrays als Referenzen (!), es können aber auch beliebig viele weitere sein (s.o.). Zurückgeliefert wird eine Liste der Elemente, die in jedem der angegebenen Arrays vorkommen. Ich hoffe, du kannst damit was anfangen...

Fehlermeldungen und Optimierungsvorschläge sind willkommen :)

bye, Frank!