Thread 2 oder mehr arrays vergleichen (9 answers)
Opened by Gast at 2008-02-07 12:51

murphy
 2008-02-07 17:18
#105688 #105688
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wenn beide Arrays bereits sortiert und duplikatfrei sind, ist Array::Diff eigentlich Overkill, weil für diesen Spezialfall die Lösung von moritz effizienter sein dürfte.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use 5.008;
use strict;
use warnings;

# Data sample
my @from = (1, 2, 4, 7);
my @to = (1, 3, 4, 5, 7, 8);

# Result
my $count = 0; # number of changes
my @added = (); # elements added in transition from @from to @to
my @removed = (); # elements removed in transition from @from to @to

# Algorithm
my ($i, $j) = (0, 0);
while ($i <= $#from or $j <= $#to) {
  if ($i > $#from or ($j <= $#to and $from[$i] > $to[$j])) {
    $count++;
    push @added, $to[$j++];
  }
  elsif ($j > $#to or ($i <= $#from and $from[$i] < $to[$j])) {
    $count++;
    push @removed, $from[$i++];
  }
  else {
    $i++;
    $j++;
  }
}

# Output
{
  local $" = ', ';
  print "count:   $count\n";
  print "added:   @added\n";
  print "removed: @removed\n";
}
When C++ is your hammer, every problem looks like your thumb.

View full thread 2 oder mehr arrays vergleichen