Klaus Mock: Sortierung von ungarischen Vokalen

Beitrag lesen

Hallo,

Wie wäre es mit folgendem:
Ich vergleiche in der Sort-Funktion die ASCII-Werte der einzelenen Zeichen in den Strings.
Für die Zeichen zwischen beispielsweise O und P ordne ich nun die Sonderzeichen mit Realzahlen ein.
Der Witz an der Sache ist, daß Du im Hash nur jene Buchstaben einordnen mußt, welche wirklich irgenwo zwischengeschoben gehören.

<code>
my(%Special) = ('Á',ord('A')+0.1,
      'É',ord('E')+0.1,
      'Í',ord('I')+0.1,
      'Ó',ord('O')+0.1,
      'Ö',ord('O')+0.2,
      'Õ',ord('O')+0.3,
      #usw
      );

@sortarray = ('AC','AA','AZ','AÁ');
$, = "\n";
print sort hungarian_sort @sortarray;

sub hungarian_sort
{
return 0 if $a eq $b; # geht wahrscheinlich schneller
my(@str_a) = split(//,$a);
my(@str_b) = split(//,$b);
my $i;

for $i(0 .. $#str_a)
  {
  my($ca) = get_ord($str_a[$i]);
  my($cb) = get_ord($str_b[$i]);
  return ($ca <=> $cb) if($ca != $cb);
  }
return 0;
}

sub get_ord
{
my($c) = shift;
return $Special{$c}?$Special{$c}:ord($c);
}
</code>

Naja ist vielleicht nicht gerade das, was bei einem Professor für Informatik Begeisterung hervorruft, aber es funktioniert soweit ich es getestet habe, und was die Theorie sagt ist dann sowieso schnuppe ;-)

Grüße
  Klaus