Autor Thema: Frage: Array sortieren per Userreading-Funktion  (Gelesen 358 mal)

Offline All-Ex

  • Full Member
  • ***
  • Beiträge: 135
Frage: Array sortieren per Userreading-Funktion
« am: 22 April 2018, 21:06:32 »
Hallo,

ich habe im HTTPMOD Modul ein Reading erzeugt, das so ausschaut:

Zitat
[["18","Gravensteiner-Platz","0"],["18","Lokalbahnhof","2"],["34","Mönchhofstraße","5"],["83","Lohrberg","3"],["34","Bornheim Mitte","5"],["18","Gravensteiner-Platz","17"],["34","Bornheim Mitte","15"],["18","Lokalbahnhof","17"],["30","Bad Vilbel Bahnhof","18"],["34","Mönchhofstraße","19"],["18","Gravensteiner-Platz","29"],["34","Bornheim Mitte","30"],["18","Lokalbahnhof","32"],["83","Lohrberg","33"]]

(Das sind Buslinien einer Haltestelle mit Ziel und der Abfahrtszeit in Minuten)

Diesen String möchte ich nach der 3. Spalte (Abfahrtszeit) aufsteigend sortieren. (Z.B. ist die 83 zum Lohrberg im String oben zu weit hinten und müsste um eine Position nach vorne). Kann ich das über eine Userreading-Funktion machen?

Danke für alle Tips,
Alex

Offline KernSani

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 2186
Antw:Frage: Array sortieren per Userreading-Funktion
« Antwort #1 am: 24 April 2018, 23:50:25 »
sicherlich kriegst du das irgendwie im userreading hin, ich würde aber empfehlen, das in 99_myUtils auszulagern
RasPi: RFXTRX, HM, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Offline mumpitzstuff

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 969
Antw:Frage: Array sortieren per Userreading-Funktion
« Antwort #2 am: 25 April 2018, 00:25:35 »
my %hash = ();
my $result = '[';
while ($reading =~ /(\[".+?"([^"]+)"\])/g)
{
  $hash{$2} = $1;
}
for my $key (sort {$a<=>$b} keys %hash)
{
  $result .= $hash{$key};
}
$result .= ']';

So vielleicht in etwa. Der erste Part parsed den String in ein Hash und verwendet dabei jeweils die dritte Spalte als Key. Dann wird der hash nach den keys sortiert und wieder zurück ins result geschrieben.

Ist nur schnell runter geschrieben bzw. zusammen kopiert. Sind bestimmt noch irgendwo Bugs drin...

Offline All-Ex

  • Full Member
  • ***
  • Beiträge: 135
Antw:Frage: Array sortieren per Userreading-Funktion
« Antwort #3 am: 26 April 2018, 23:18:03 »
Danke Dir!

Der Code funktioniert schon mal mit dem Beispiel-String :-) Wenn es aber 2 gleiche Werte bei der Abfahrtszeit (3. Spalte) gibt, wird eine Verbindung gelöscht (hash kennt ja keine doppelten Keys).

Ich schau mal ob ich es auf ein Array umgebaut kriege...

Alex

Offline mumpitzstuff

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 969
Antw:Frage: Array sortieren per Userreading-Funktion
« Antwort #4 am: 27 April 2018, 00:10:31 »
my %hash = ();
my $result = '[';
while ($reading =~ /(\[".+?"([^"]+)"\])/g)
{
  $hash{$1} = $2;
}
for my $key (sort {$hash{$a}<=>$hash{$b}} keys(%hash))
{
  $result .= $key;
}
$result .= ']';

Offline All-Ex

  • Full Member
  • ***
  • Beiträge: 135
Antw:Frage: Array sortieren per Userreading-Funktion
« Antwort #5 am: 27 April 2018, 07:10:55 »
Gute Idee, das einfach rumzudrehen  :) Funktioniert jetzt!

Danke,
Alex

 

decade-submarginal