NEWS
Position des kleinsten Wertes einer Liste
-
Hallo zusammen,
Gibt es im Blockly eine elegante Lösung, die Position des kleinsten (oder noch besser betragsmäßig kleinsten) Wertes in einer Liste zu ermitteln?
Danke schon mal im Voraus!
-
@guitardoc Unelegant wäre, die Liste zu sortieren - danach ist die Position des kleinsten Elements bekannt
-
Kann das leider nur in javascript. Aber eventuell kannst du das daraus nachbauen
let a = [2,10,3,9,4,8,1,5]; let minIndex=-1; //initialisierung minIndex mit -1, falls Liste leer let minValue=Number.MAX_VALUE; //größtmöglichste Zahl in javascript for (let i = 0; i < a.length; i++) { //Schleife um das ganze Array abzuklappern if (a[i]<minValue) { //prüfen auf nächst kleineren Wert minIndex=i; //wenn nächst kleinere Wert gefunden, dann index merken minValue=a[i]; //und den kleinsten Wert merken } } console.log(minIndex); // Nach Prüfung der kompletten Liste steht in minIndex die Position im Array. // Array-Index beginnt bei 0. d.h. erster Wert hat Index 0 // Wenn Liste leer, dann ist Ergebnis -1 // Wenn gleiche Werte mehrfach vorkommen, dann wird immer der index des ersten Eintrags gefunden
-
@oliverio Einen Schatz in der Gruppe "Mathematik" gefunden...
Das Suchen nach dem Minumum des Betrages der Elemente wird aber schwierig ...
Da gibt es aber z. B. die map() Funktion mit der ein Duplikat der Liste mit den Absolutwerten der Elemente erzeugt werden könnte ...
-
Ich kann nur wieder sagen: JSONATA ist Dein Freund.
$#$i[$=$min($$)].$i+1
Das tolle daran ist nun, dass man das Ganze nun auch mit Objekten machen kann.
-
@mickym sagte in Position des kleinsten Wertes einer Liste:
$#$i[$=$min($$)].$i+1
sieht kurz, pragmatisch und gut aus
-
Der Vorteil ist halt bei JSONATA - dass Du zum Beispiel bei Objekten - die Position gar nicht brauchst.
Nehmen wir mal dieses Objektearray:
[ { "text": "Wohnzimmer", "Wert": 2 }, { "text": "Flur", "Wert": 10 }, { "text": "Diele", "Wert": 3 }, { "text": "Schlafzimmer", "Wert": 9 }, { "text": "Küche", "Wert": 4 }, { "text": "Bad", "Wert": 8 }, { "text": "Keller", "Wert": 1 }, { "text": "Büro", "Wert": 5 } ]
und wollen den Raum mit dem niedrigsten Wert ermitteln.
$[$.Wert=$min($$.Wert)].text
-
@guitardoc
Ohne Javascript und JSONATA:Einfacher geht es ohne Betrag:
-
Ich hab es jetzt so gebaut wie Paul vorgeschlagen hat.
Ich brauche die Position, da ich weitere Listen habe und von dort die zugehörigen Werte der gleichen Position brauche (weil es kein Array of Array gibt).Stimmt, man hätte es eleganter mit json und jsonata machen können. Da hätte ich die Daten aber anders speichern müssen und ich kenne mich damit auch nicht so gut aus...