Thread Array Elemente vergleichen und speichern (9 answers)
Opened by PETER_PAN2009 at 2009-09-03 13:31

topeg
 2009-09-03 13:49
#125373 #125373
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Du musst schon alle elemene des einen Arrays mit allen elemnten des anderen Arrays vergleichen.

Etwa so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub compare_arrays
{
  my ($first, $second) = @_;
  my @tmp;
  for my $elm (@$first) 
  {
    if(defined($elm) && grep{defined($_) && $elm eq $_}@$second)
    {
      push(@tmp,$elm);
    }
  }
  return @tmp;
}

Es werden dabei aber auch doppelte Einträge aus Array "$first" übernommen.

Willst du das nicht, brauchst du einen Hash in dem du gefundenen Doppelte speicherst:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub compare_arrays
{
  my ($first, $second) = @_;
  my %found;
  my @tmp;
  for my $elm (@$first) 
  {
    if(defined($elm) && grep{defined($_) && $elm eq $_}@$second && !$found{$elm})
    {
      push(@tmp,$elm);
      $found{$elm}++;
    }
  }
  return @tmp;
}


Das kann man dann auch einfacher schreiben:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub compare_arrays
{
  my ($first, $second) = @_;
  my %found=map{($_,1)}@$first;
  my @tmp;
  for my $elm (@$second)
  {
    if(defined($elm) && $found{$elm})
    {
      push(@tmp,$elm);
    }
  }
  return @tmp;
}

View full thread Array Elemente vergleichen und speichern