Thread Ein Array nach einem anderen Array sortieren (11 answers)
Opened by hugenyn at 2011-08-27 21:36

topeg
 2011-08-28 08:18
#151883 #151883
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Es geht noch schneller:

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
#! /usr/bin/perl
use strict;
use warnings;

my @order = qw(
               29 20 31  5 18 36 17  3 16  9 27 32
               25 35 11 10 23  4 26 12 24 30  6 15
               13  2 21 19 14 33 22  7 34  8  1 28
);

my @items = qw(
    7 12M 3 4 17CG 25 33
);

my %items_hash;
for my $key (@items)
{
  ( my $copy = $key ) =~ tr/0-9//cd;
  $items_hash{$copy}=$key;
}

my @folge;
my $fpos=0;
my $elm;
for ( @order )
{
  $elm=delete($items_hash{$_});
  $folge[$fpos++]=$elm if(defined($elm))
}

print "@folge\n";


Dein und mein Code gehen beide Arrays nur einmal durch, aber dafür ist mein Hash aber kürzer und perl braucht nicht so lange diesen nach dem Schlüssel zu durchsuchen. Zudem verkleinere ich den Hash immer weiter. Das bedeutet noch weniger Arbeit für perl nach jedem Fund. Zudem kann mich mir das grep am Ende sparen, was auch ein klein wenig bringt.

Insgesamt ist mein Ansatz ungefähr 40% schneller als deiner. Je größer @order im Verhältnis zu @items wird, um so besser schneidet mein Code ab.

View full thread Ein Array nach einem anderen Array sortieren