Thread Array-Elemente sortieren und letztes Array-Element löschen (10 answers)
Opened by ITobiI at 2015-11-10 15:15

clms
 2015-11-11 11:12
#182873 #182873
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2015-11-10T16:05:19 ITobiI
ich sende eine bestimmte Anzahl von Datenpaketen vom Client zum Server und diese Datenpakete können in einer anderen Reihenfolge ankommen. Ich habe die Datenpakete bereits mit einem Index versehen um Sie identifizieren zu können jetzt hab ich nur das Problem Sie wieder in die richtige Reihenfolge zu kriegen und ich habe jeweils die Inhalte der einzelnen Datenpakete in einem Array-Element abgelegt und den Index für das jeweilige Array-Element verwendet.


Mal abgesehen von dem Socket-Problem, dass die anderen diskutieren -
wenn Du aus Deiner Message Index und Nutzdaten extrahiert hast und die Nutzdaten in einem Array unter dem Index ablegst, hast Du die Nutzdaten doch in der gewünschten Reihenfolge. Was musst Du sie dann noch sortieren? Das einzige was sein könnte, ist dass die Message für einen bestimmten Index zwischendurch noch fehlt und der Arraywert für diesen Index deshalb undef ist.

Wenn Du deine Daten irgendwann in eine andere Reihenfolge bringst, sie danach aber wieder nach dem Index sortieren möchtest, empfiehlt sich, die Message in eine komplexere Datenstruktur zu verwandeln, die Felder für Index und Nutzdaten (und evtl. noch mehr) hat. Diese komplexe Datenstruktur kann ein Objekt, ein anonymer Hash mit festgelegten Keys oder ein anonymes Array sein. Beispiele:
Code (perl): (dl )
1
2
3
4
5
6
7
8
# HASH
my $msg = {index => $a, data => $data}; # datenstruktur anlegen
push @array, $msg;                      # in liste speichern       
my $index = $msg->{index};
my $data = $msg->{data};

# Liste von Messages nach Index sortieren
my @sorted = sort {$a->{index} <=> $b->{index}} @array;

Code (perl): (dl )
1
2
3
4
5
6
7
8
# ARRAY - 0: index, 1: data
my $msg = [$a, $data];   # datenstruktur anlegen
push @array, $msg;       # in liste speichern       
my $index = $msg->[0];
my $data = $msg->[1];

# Liste von Messages nach Index sortieren
my @sorted = sort {$a->[0] <=> $b->[0]} @array;

View full thread Array-Elemente sortieren und letztes Array-Element löschen