Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Position des kleinsten Wertes einer Liste

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Position des kleinsten Wertes einer Liste

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      guitardoc last edited by guitardoc

      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!

      MartinP paul53 2 Replies Last reply Reply Quote 0
      • MartinP
        MartinP @guitardoc last edited by

        @guitardoc Unelegant wäre, die Liste zu sortieren - danach ist die Position des kleinsten Elements bekannt 😉

        246083d2-e2e7-40d1-aac5-d9391bfc9622-grafik.png

        1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO last edited by OliverIO

          @guitardoc

          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
          
          MartinP 1 Reply Last reply Reply Quote 0
          • MartinP
            MartinP @OliverIO last edited by MartinP

            @oliverio Einen Schatz in der Gruppe "Mathematik" gefunden...

            355d6b9a-111e-4208-8230-2d533a6f6c03-grafik.png

            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 ...

            1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active last edited by mickym

              Ich kann nur wieder sagen: JSONATA ist Dein Freund.

              9b14d0c7-4d40-44cc-8a43-62346eb798ae-image.png

              $#$i[$=$min($$)].$i+1
              

              <xml xmlns="https://developers.google.com/blockly/xml">
               <variables>
                 <variable id="+~=%aoi[9`/^_Vm7KPjg">liste</variable>
               </variables>
               <block type="variables_set" id="i49j,#R8*if^*;].A{f+" x="-963" y="-412">
                 <field name="VAR" id="+~=%aoi[9`/^_Vm7KPjg">liste</field>
                 <value name="VALUE">
                   <block type="convert_jsonata" id="Rs4%n:/{Mi!Rkz7N!uSU">
                     <value name="EXPRESSION">
                       <shadow type="text" id="NW5izBM_hf(X,YY@Zb2S">
                         <field name="TEXT">[2,10,3,9,4,8,1,5]</field>
                       </shadow>
                     </value>
                     <value name="TARGET">
                       <block type="variables_get" id=",k;uNjB|bsbVq4I)Rps3">
                         <field name="VAR" id="+~=%aoi[9`/^_Vm7KPjg">liste</field>
                       </block>
                     </value>
                   </block>
                 </value>
                 <next>
                   <block type="debug" id="l;$.aF$3}Ej8@9vylVA1">
                     <field name="Severity">info</field>
                     <value name="TEXT">
                       <shadow type="text" id="e^2}nYU5oX.HU/A7/Y]A">
                         <field name="TEXT">test</field>
                       </shadow>
                       <block type="variables_get" id="(e;yaXaZWgR$7f0mL=Mv">
                         <field name="VAR" id="+~=%aoi[9`/^_Vm7KPjg">liste</field>
                       </block>
                     </value>
                     <next>
                       <block type="debug" id="wPFkW|VzI3VXd{=GCB+5">
                         <field name="Severity">info</field>
                         <value name="TEXT">
                           <shadow type="text" id="Vd/?awN$ir]m`ZHHy:Z)">
                             <field name="TEXT">test</field>
                           </shadow>
                           <block type="text_join" id="#3xBtzsH!E7mn4Ga~5%-">
                             <mutation items="2"></mutation>
                             <value name="ADD0">
                               <block type="text" id="me@K]6:~$L$LD{)/NFZE">
                                 <field name="TEXT">Der kleinste Wert befindet sich an Position: </field>
                               </block>
                             </value>
                             <value name="ADD1">
                               <block type="convert_jsonata" id="uojS2Yc|c#W556YE`x.$">
                                 <value name="EXPRESSION">
                                   <shadow type="text" id="uRVkocF{_]3:`W+in!+(">
                                     <field name="TEXT">$#$i[$=$min($$)].$i+1</field>
                                   </shadow>
                                 </value>
                                 <value name="TARGET">
                                   <block type="variables_get" id="-8ARd_-FizU[S(l3/9_R">
                                     <field name="VAR" id="+~=%aoi[9`/^_Vm7KPjg">liste</field>
                                   </block>
                                 </value>
                               </block>
                             </value>
                           </block>
                         </value>
                       </block>
                     </next>
                   </block>
                 </next>
               </block>
              </xml>
              

              Das tolle daran ist nun, dass man das Ganze nun auch mit Objekten machen kann.

              OliverIO 1 Reply Last reply Reply Quote 0
              • OliverIO
                OliverIO @mickym last edited by

                @mickym sagte in Position des kleinsten Wertes einer Liste:

                $#$i[$=$min($$)].$i+1

                sieht kurz, pragmatisch und gut aus

                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @OliverIO last edited by mickym

                  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
                  

                  c00c6c9b-a261-44e5-9179-0ed7578114ac-image.png

                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @guitardoc last edited by paul53

                    @guitardoc
                    Ohne Javascript und JSONATA:

                    Blockly_temp.JPG

                    Einfacher geht es ohne Betrag:

                    Blockly_temp.JPG

                    G 1 Reply Last reply Reply Quote 1
                    • G
                      guitardoc @paul53 last edited by

                      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...

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      704
                      Online

                      32.0k
                      Users

                      80.4k
                      Topics

                      1.3m
                      Posts

                      5
                      9
                      357
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo