Thread Liste von Arrays sortieren (14 answers)
Opened by scriptor at 2018-04-12 08:54

haj
 2018-04-12 10:18
#188262 #188262
User since
2015-01-07
552 Artikel
BenutzerIn

user image
Du kannst eine sortierte Liste der Connections so erzeugen:

Code: (dl )
my @sorted = sort { ($a->[0]-$a->[1])**2 <=> ($b->[0]-$b->[1])**2 } @Connections;


Wenn Du tatsächlich eine Liste mit den sortierten Indices von @Connections brauchst, dann sortierst Du die Zahlen 0..$#Connections mit dem "richtigen" Sortierkriterium. Wortreich geschrieben:

Code: (dl )
1
2
3
4
5
6
7
8
9
sub index_by_length {
my $conn_a = $Connections[$a];
my $diff_a = $conn_a->[0] - $conn_a->[1];
my $conn_b = $Connections[$b];
my $diff_b = $conn_b->[0] - $conn_b->[1];
return $diff_a*$diff_a <=> $diff_b*$diff_b;
}

my @sorted_indices = sort index_by_length 0..$#Connections;


Etwas knapper und idiomatischer:

Code: (dl )
1
2
3
my @diffs = map { my $diff = $_->[0]-$_->[1]; $diff*$diff } @Connections;

my @sorted_indices = sort { $diffs[$a] <=> $diffs[$b] } 0..$#Connections;


Cheers,
haj

@Linuxer: Bei Deinem sort musst Du auch quadrieren (oder abs() verwenden).
Last edited: 2018-04-12 10:27:22 +0200 (CEST)

View full thread Liste von Arrays sortieren