4D v16.3Find in sorted array |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Find in sorted array
|
Find in sorted array ( Array ; Wert ; > oder < {; ErstePos {; LetztePos}} ) -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
Array | Array |
![]() |
Array zum Suchen | |||||
Wert | Ausdruck |
![]() |
Wert (gleicher Typ wie Array) zum Suchen im Array | |||||
> oder < | Operator |
![]() |
> wenn Array in aufsteigender Reihenfolge sortiert ist, < wenn Array in absteigender Reihefolge sortiert ist |
|||||
ErstePos | Lange Ganzzahl |
![]() |
Position des ersten Vorkommens, wenn der Wert gefunden wird; sonst Position, an der der Wert eingefügt werden soll. |
|||||
LetztePos | Lange Ganzzahl |
![]() |
Postion des letzten Vorkommens, wenn der Wert gefunden wird; sonst gleicher Wert wie ErstePos | |||||
Funktionsergebnis | Boolean |
![]() |
Wahr, wenn mindestens ein Element im Array zum Wert passt, sonst Falsch | |||||
Die Funktion Find in sorted array gibt wahr zurück, wenn mindestens ein Element im sortierten Array zum Parameter Wert passt. Sie gibt optional auch die Position des Elements zurück. Im Gegensatz zu Find in array funktioniert Find in sorted array nur mit einem sortierten Array und gibt außerdem die Position der Vorkommen an. So lassen sich auch Elemente einfügen, wenn keine Vorkommen gefunden werden.
Das Array muss bereits sortiert und in derselben Reihenfolge sein, wie im Parameter > oder < angegeben wurde, d.h. "größer als" für aufsteigende und "kleiner als" für absteigende Reihenfolge. Andernfalls ist das Suchergebnis u.U. nicht korrekt. Find in sorted array nutzt die Sortierung und einen binären Suchalgorithmus, was bei umfangreichen vorsortierten Arrays in der Regel effektiver ist. Weitere Informationen dazu finden Sie unter Wikipedia, binäre Suche.
In folgenden Fällen ignoriert die Funktion die Sortierrichtung und arbeitet wie die Funktion Find in array (sequentielle Suche, gibt für ErstePos und LetztePos -1 zurück, wenn Wert nicht gefunden wird):
Gibt die Funktion False zurück, kann der in ErstePos zurückgegebene Wert an INSERT IN ARRAY übergeben werden, um den Wert in das bereits vorsortierte Array einzufügen. Das läuft schneller, als erst einen neuen Eintrag ans Ende des Array zu setzen und dann SORT ARRAY aufzurufen, um es an die richtige Stelle zu bewegen.
Die in LetztePos und ErstePos zurückgegebenen Werte lassen sich miteinander kombinieren, um jedes Element des Arrays zu durchlaufen, das zu Wert passt (mit einer For...End for Schleife) oder um die Anzahl der Vorkommen zu finden (wie auch mit dem Befehl Count in array, nur schneller).
Bei Bedarf einen Wert einfügen und dabei das sortierte Array beibehalten:
C_LONGINT($pos)
If(Find in sorted array($array ;$value ;>;$pos)
ALERT("Found at pos "+String($pos))
Else
INSERT IN ARRAY($array ;$pos)
$array{$pos}:=$value
End if
Die Anzahl der Vorkommen von Strings finden, die mit "test" beginnen und einen String erstellen, der diese Elemente zusammenfasst:
C_LONGINT($posFirst ;$posLast)
C_TEXT($output)
If(Find in sorted array($array ;"test@";>;$posFirst ;$posLast))
$output:="Found "+String($posLast-$posFirst+1)+" results :\n"
End if
For($i ;$posFirst ;$posLast)
$output:=$output+$array{$i}+"\n"
End for
Produkt: 4D
Thema: Arrays
Nummer:
1333
Erstellt: 4D v14 R4
4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)