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
-
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
; -
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.
-
@Günther
Aber nur solange in dem Array keine Werte stehen, die ein Komma beinhalten ;)
-
Richtig, aber so etwas macht man nicht ;-)
-
Danke Günther, sehr hilfreich:
Dein Code-Snippet funktioniert!
-
Danke Günther, sehr hilfreich:
Dein Code-Snippet funktioniert!
-
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!
-
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 3 JahrenZuletzt aktiv
- 8Antworten
- 2961Ansichten