Thread Ein Array nach einem anderen Array sortieren
(11 answers)
Opened by hugenyn at 2011-08-27 21:36
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. |