1

Index eines Arrays ermitteln.

Hallo zusammen,

ich kann aus einem Array  mit

item(array, index)

einzelne Werte extrahieren. Ich brauche eine umgekehrte Funktion, quasi 

index(array, item)

bis jetzt habe ich mit einer Schleife realisiert:

---

for II from 0 to cnt(myARRAY) do

if item(myARRAY, II)=myITEM then

let myINDEX:=II

end

end

---

Es ist aber nur für kurze Arrays gut. Gibt es auch einen direkten weg?

 

Grüße

Leo

8 Antworten

null
    • engelhardt_paridatanet
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hier eine weitere Variante. Sie beendet die Schleife vorzeitig, wenn der Wert gefunden wurde. Man kann auch durch Setzen von "i" von einer anderen als der ersten Stelle im Array anfangen zu suchen. Wünschenswert wäre aber wie Leo schon sagte, eine eingebaute Funktion zum index finden.

    var break_ := false;
    var i := 0; let info="index, ab dem gesucht wird, 0-basiert";
    let len := cnt(array);
    var idx := -1; let info="default wert, falls gesuchter wert nicht gefunden wird.";
    while not break_ and i < len do
        if pnr = item(array, i) then
            idx := i;
            break_ := true
        end;
        i := i + 1
    end
    ;

    • Gunther.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Geht vielleicht auch so:

    let teil:=index(text(myARRAY),myITEM) + length(myITEM);
    let newArray := split(substr(text(myARRAY),0,teil),",");
    let myINDEX := cnt(newArray);

    Array zu Text machen, Teilstring suchen und als Ende eines neuen Arrays einsetzen. Das gesuchte Teil liegt dan am Ende und wird mit cnt() gefunden.

    • engelhardt_paridatanet
    • vor 5 Jahren
    • Gemeldet - anzeigen

    @Günther

    Aber nur solange in dem Array keine Werte stehen, die ein Komma beinhalten ;)

    • Gunther.1
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Richtig, aber so etwas macht man nicht ;-)

    • Robert_Haase_Sente_Gmb
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Günther, sehr hilfreich:

    Dein Code-Snippet funktioniert!

    • Robert_Haase_Sente_Gmb
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke Günther, sehr hilfreich:

    Dein Code-Snippet funktioniert!

    • Andreas_Schmitz
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Um den "Index" in einer Tabelle zu bekommen, kann man man folgende Funktion berechnen:

    let n := number(Nr);

    cnt((select Tabelle)[number(Nr) <= n])

    Das Ergebnis ist eine fortlaufende Zahl, beginnend mit 1, da cnt nur die wirklichen Einträge zählt. Wird ein Eintrag gelöscht, dann wird automatisch der "Index" neu berechnet. Dies geschieht aber erst, wenn man die Tabelle refreshed. Im Gegensatz zu Nr, wo Zahlen fehlen, wenn man einen Eintrag löscht, bleibt hier die Kontinuität der Zahlen erhalten! Dies kann man natürlich auch mit einem Array machen! Wäre schön, wenn es eine Funktion recalc gäbe, die man an das Ende der Funktion stellen könnte, damit automatisch eine Neuberechnung durchgeführt werden kann!

    • Johannes
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Gibts da mittlerweile eine einfachere, schlankere Lösung?

    So wie von Leonid beschrieben vielleicht?

    Ich bau mir das Array erst in der Formel zusammen, daher kann ich auf keine Tabellenwerte zurückgreifen.

     

    let myARR1 := ["Objekt 1","Objekt 2"]

    let myARR2 := ["Elemet 1","Elemet 2"]

    item(myARR1,index(myARR2,"Element 2") oder so ähnlich wäre genial...

     

    VG J

Content aside

  • 1 „Gefällt mir“ Klicks
  • vor 2 JahrenZuletzt aktiv
  • 8Antworten
  • 2893Ansichten